好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTML5 Web Workers

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的详细内容...

  阅读:43次

上一篇

下一篇

第1节:HTML5 教程    第2节:HTML5 浏览器支持    第3节:HTML5 新元素    第4节:HTML5 Video 视频    第5节:HTML 5 Video + DOM    第6节:HTML5 内联 SVG    第7节:HTML5 新的 Input 类型    第8节:HTML5 MathML 数学公式    第9节:HTML5 Geolocation 地理定位    第10节:HTML5 Canvas画布    第11节:HTML5 拖放 ( drag 和 drop )    第12节:HTML5 Audio 音频    第13节:HTML5 Web Workers    第14节:HTML5 表单元素    第15节:HTML5 表单属性    第16节:HTML5 语义元素    第17节:HTML5 Web 存储    第18节:HTML5 Web SQL 数据库    第19节:HTML5 应用程序缓存    第20节:HTML 5 服务器发送事件    第21节:HTML5 WebSocket    第22节:HTML5 历史记录API    第23节:HTML 5 代码规范    第24节:HTML5 Canvas 描边和填充    第25节:HTML5 Canvas 绘制矩形    第26节:HTML5 Canvas 清除画布    第27节:HTML5 Canvas 渐变    第28节:HTML5 Canvas 合成    第29节:HTML5 Canvas 绘制图像    第30节:HTML5 Canvas 绘制文本    第31节:HTML5 Canvas 阴影    第32节:HTML5 Canvas 路径    第33节:HTML5 Canvas 转换    第34节:HTML5 Canvas 状态    第35节:HTML5 Canvas toDataURL()    第36节:HTML5 Canvas 像素处理    第37节:HTML5 Canvas 制作动画