html5 Web Worker 是运行在 后台 的 JavaScript,不会影响 页面 的 性能
什么是 Web Worker?
当在 html 页面 中执行脚本时, 页面 的状态是不可响应的,直到脚本已完成
Web Worker 是运行在 后台 的 JavaScript,独立于其它脚本,不会影响 页面 的 性能
我们可以继续做任何愿意做的事情:点击、选取 内容 等等,而此时 web worker 在 后台 运行
检测 Web Worker 支持
在创建 web worker 之前,请检测 用户 的浏览器是否 支持 它:
if(typeof(Worker)!=="undefined") ??{ ??//?Yes!?Web?worker?support! ??//?Some?code..... ??} else ??{ ??//?Sorry!?No?Web?Worker?support.. ??}
创建 web worker 文件
现在,让我们在 一个 外部 JavaScript 中创建我们的 web worker。
在这里 ,我们创建了计数脚本。该脚本存储于 "demo_workers.js" 文件 中:
var?i=0; function?timedCount() { i=i+1; postMessage(i); setTimeout("timedCount()",500); } timedCount();
以上 代码 中重要的部分是?postMessage()? 方法 - 它用于向 HTML 页面 传回一段消息。
注释:web worker 通常不用于如此简单的脚本,而是用于更耗费 cpu 资源的任务。
创建 Web Worker 对象
我们已经有了 web worker 文件 ,现在我们需要从 HTML 页面 调用 它。
下面的 代码 检测是否存在 worker,如果不存在,- 它会创建 一个 新的 web worker 对象,然后运行 "demo_workers.js" 中的 代码 :
if(typeof(w)=="undefined") ??{ ??w=new?Worker("demo_workers.js"); ??}
然后我们就可以从 web worker 发生和接收消息了。
向 web worker 添加 一个 "onmessage" 事件监听器:
w.onmessage=function(event){ document.getElementById("result").innerHTML=event.data; };
当 web worker 传递消息时,会执行事件监听器中的 代码 。event.data 中存有来自 event.data 的数据。
终止 Web Worker
当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。
如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法 :
w.terminate();
完整的 Web Worker 实例 代码
我们已经看到了 .js 文件 中的 Worker 代码 。下面是 HTML 页面 的 代码 :
实例
<!DOCTYPE?html>
<html>
<body>
<p>Count?numbers:?<output?id="result"></output></p>
<button?onclick="startWorker()">Start?Worker</button>
<button?onclick="stopWorker()">Stop?Worker</button>
<br?/><br?/>
<script>var?w;
function?startWorker()
{
if(typeof(Worker)!=="undefined")
{
??if(typeof(w)=="undefined")
????{
????w=new?Worker("demo_workers.js");
????}
??w.onmessage?=?function?(event)?{
????document.getElementById("result").innerHTML=event.data;
??};
}
else
{
document.getElementById("result").innerHTML="Sorry,your? bro wser
?does?not?support?Web?Workers...";
}
}
function?stopWorker()
{
w.terminate();
}
</script>
</body>
</html>
Web Workers 和 DOM
由于 web worker 位于外部 文件 中,它们无法访问下例 JavaScript 对象:
window 对象
document 对象
parent 对象
HTML 5 服务器发送事件 ? ?HTML5 应用程序缓存查看更多关于HTML5 Web Workers的详细内容...