1. web worker是运行在后台的JavaScript, 不会影响页面的性能。

2. 什么是Web Worker?

2.1. 当在html页面中执行脚本时, 页面的状态是不可响应的, 直到脚本已完成。

2.2. web worker是运行在后台的JavaScript, 独立于其他脚本, 不会影响页面的性能。您可以继续做任何愿意做的事情: 点击、选取内容等等, 而此时web worker在后台运行。

3. 浏览器支持: 所有主流浏览器均支持web worker, 除了Internet Explorer。

4. 检测 Web Worker 支持

4.1. 在创建web worker之前, 请检测用户的浏览器是否支持它:

if(typeof(Worker)!=="undefined") {// Yes! Web worker support!// Some code.....
} else {// Sorry! No Web Worker support..
}

5. 创建web worker文件

5.1. 现在, 让我们在一个外部JavaScript中创建我们的web worker。

5.2. 在这里, 我们创建了计数脚本。该脚本存储于"demo_workers.js"文件中:

var i = 0;function timedCount() {i = i + 1;postMessage(i);setTimeout("timedCount()", 500);
}timedCount();

5.3. 以上代码中重要的部分是postMessage()方法: 它用于向html页面传回一段消息。

5.4. 注释: web worker通常不用于如此简单的脚本, 而是用于更耗费CPU资源的任务。

6. 创建Web Worker对象

6.1. 我们已经有了web worker文件, 现在我们需要从html页面调用它。

6.2. 下面的代码检测是否存在worker, 如果不存在, 它会创建一个新的web worker对象, 然后运行"demo_workers.js"中的代码:

if(typeof(w) == "undefined") {w = new Worker("demo_workers.js"); // 服务器上的一个js文件
}

6.3. 然后我们就可以从web worker发生和接收消息了。

6.4. 向web worker添加一个"onmessage"事件监听器:

w.onmessage = function(messageEvent) {document.getElementById("result").innerHTML = messageEvent.data;
};

6.5. 当web worker传递消息时, 会执行事件监听器中的代码。event.data中存有来自event.data的数据。

7. 终止Web Worker

7.1. 当我们创建web worker对象后, 它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。

7.2. 如需终止web worker, 并释放浏览器/计算机资源, 请使用terminate()方法:

w.terminate();

8. 完整的Web Worker实例代码

8.1. 新建一个名叫WebWorkers的动态Web工程

8.2. worker.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta charset="utf-8" /><title>Web Workers</title></head><body><p>计数: <output id="result"></output></p><button onclick="startWorker()">开始 Worker</button> <button onclick="stopWorker()">停止 Worker</button><br /><br /><script type="text/javascript">var w;function startWorker() {if(typeof(Worker) !== "undefined") {if(typeof(w) == "undefined") {w = new Worker("demo_workers.js");}w.onmessage = function (messageEvent) {document.getElementById("result").innerHTML = messageEvent.data;};} else {document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers...";}}function stopWorker() { w.terminate();}</script></body>
</html>

8.3. demo_workers.js

var i = 0;function timedCount() {i = i + 1;postMessage(i);setTimeout("timedCount()", 500);
}timedCount();

8.4. 启动服务器, 访问worker.html

9. Web Workers和DOM

9.1. 由于web worker位于外部文件中, 它们无法访问下例JavaScript对象:

9.1.1. window对象

9.1.2. document对象

9.1.3. parent对象

084_html5WebWorkers相关推荐

最新文章

  1. debian/ubuntu下安装java8
  2. 解决jar包乱码 in 创新实训 智能自然语言交流系统
  3. response生成图片验证码
  4. 【Usaco2014Open银组】照相(pairphoto)
  5. apscheduler -定时任务
  6. 《塔木德智慧全书》(之四)
  7. JSP之【include】指令
  8. memcache使用方法测试 # 转自 简单--生活 #
  9. 【转】Java中的static关键字解析
  10. AutoCAD二次开发——引线标注
  11. Hypermedia 简介
  12. Volatility内存取证使用
  13. 使用Mixamo绑定骨骼导入动画
  14. 阿里云ECS服务器配置怎么选?
  15. opencv分离RGB三通道
  16. AWS实例3T磁盘初始化分区及docker环境部署
  17. 【玖哥乱弹】祭天时不同程序员的不同杀法
  18. 烂泥:Domino8.5服务器迁移方案
  19. 【Python】星号与双星号
  20. 如何快速定位自己热爱的工作

热门文章

  1. 《Swift开发实战》——第16章,第16.2节下标脚本用法
  2. localhost与127.0.0.1的概念和工作原理之不同
  3. 趁有空,再了解一下GROOVY中关于类的通例
  4. java ssl https 连接详解 生成证书
  5. 运维自动化之ansible playbook安装apache
  6. 多协议标签的MPLS发布与管理_MPLS
  7. CentOS安装高版本gcc
  8. QLibrary 动态加载外部库文件
  9. Python学习之路 (六)爬虫(五)爬取拉勾网招聘信息
  10. castle之动态代理