html5中的web worker用法


html5 web worker相当于在主线程下有开了一个子线程,可以在后台运行子线程而不影响页面相应。


if(typeof(Worker)!=="undefined")

{

if(typeof(w)=="undefined")

{

 var w=new Worker("demo_test.js");

 work.onmessage=function(event)d

{

document.getElementById("hint").innerHTML=event.data;

}

}

}

else

{

document.getElementById("hint").innerHTML="web worker is not supported by this browser!";

}


web worker的常用api

postMessage()用于主线程与子线程的相互通信。

主线程传递给子线程:w.postMessage();

子线程传递给主线程:postMessage();


onmessage():主线程与子线程用于监听消息;

主线程监听来之子线程的消息:w.onmessage=function(event){event.data}

子线程监听来之主线程的消息:  onmessage=function(event){}


onerror()用于监听错误

w.οnerrοr=function(e)

{

e.message:错误消息

e.lineno:错误所在的行号

e.filename:错误的文件名

}


一般来说Javascript和页面的UI会共用一个线程,所以当点击一个按钮开始运行Javascript后,在这段代码运行完毕之前,页面是无法响应用户操作的,换句话来说就是被“冻结”了。而这段代码可以交给Web Worker在后台运行,那么页面在Javascript运行期间依然可以响应用户操作。后台会启动一个worker线程来执行这段代码,用户可以创建多个worker线程。所以你可以在前台做一些小规模分布式计算之类的工作,不过Web Worker有以下一些使用限制:

  • Web Worker无法访问DOM节点;
  • Web Worker无法访问全局变量或是全局函数;
  • Web Worker无法调用alert()或者confirm之类的函数;
  • Web Worker无法访问window、document之类的浏览器全局变量;

不过Web Worker中的Javascript依然可以使用setTimeout(),setInterval()之类的函数,也可以使用XMLHttpRequest对象来做Ajax通信。


相关链接:


浅谈web worker


关于Web Worker你必须知道的7件事


你可能感兴趣的:(html5中的web worker用法)