HTML5入门

《精通HTML5编程》第八章:HTML5 Web Worker API

字号+ 作者: 来源: 2014-11-16 20:49 我要评论( )

HTML5 Web Worker API 众所周知,类似很多UI框架,浏览器中JavaScript在单线程中执行。如果UI线程的JS阻塞会造成界面无响应。Web Worker可以在单独的线程中JS代码,但由于浏览器的特性,WebWo

 HTML5 Web Worker API

众所周知,类似很多UI框架,浏览器中JavaScript在单线程中执行。如果UI线程的JS阻塞会造成界面无响应。Web Worker可以在单独的线程中JS代码,但由于浏览器的特性,WebWorker无法访问dom,只能通过特定的事件和postMessage API和主线程通信。Web Worker可以使用timer API,在一个Worker中也可以启动子Worker。 WebWorder非常适合运算密集型的操作。

检测浏览器支持:
function loadDemo() {
if (typeof(Worker) !== “undefined”) {
document.getElementById(“support”).innerHTML =
“Excellent! Your browser supports HTML5 Web Workers”;
}
}

创建WebWorker
worker = new Worker(“echoWorker.js”);
主页面可以使用script标签异步加载javascript文件,但由于Web Worker无法访问dom,所以其内部可以使用如下方式异步加载js文件:
importScripts(“helper.js”, “anotherHelper.js”);
文件的加载按照参数指定的顺序进行。

和webWorker通信:
主程序:

JavaScript Code复制内容到剪贴板
  1. document.getElementById(“helloButton”).onclick = function() {  
  2. worker.postMessage(“Here’s a message for you”);  
  3. }  

worker中:

JavaScript Code复制内容到剪贴板
  1. worker.addEventListener(“message”, messageHandler, true);  
  2. function messageHandler(e) {  
  3. // process message from worker  
  4. }  

错误处理:
在WebWorker中遇到未处理的异常,其error事件就会被触发。通常情况下我们应该监听WebWork的错误信息,方式如下:

JavaScript Code复制内容到剪贴板
  1. function errorHandler(e) {  
  2. console.log(e.message, e);  
  3. }  
  4. worker.addEventListener(“error”, errorHandler, true);  

停止WebWorker:
WebWorker不会自己停止。如果你想要回收WebWorker占用的资源,或者停止一个运行很长时间的WebWorker,可以调用如下方法:

JavaScript Code复制内容到剪贴板
  1. worker.terminate();  


被终止的WebWorker不再会响应其他事件,也不会执行任何运算。另外被终止的WebWorker也不能重新启动,但是你可以使用相同的js文件重新建立一个WebWorker。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 《精通HTML5编程》第十一章:尚未广泛支持的新特

    《精通HTML5编程》第十一章:尚未广泛支持的新特

    2014-11-16 20:49

  • 《精通HTML5编程》第十章:离线应用和尚未广泛支

    《精通HTML5编程》第十章:离线应用和尚未广泛支

    2014-11-16 20:49

  • 《精通HTML5编程》第九章:Web Sotrage API

    《精通HTML5编程》第九章:Web Sotrage API

    2014-11-16 20:49

  • 《精通HTML5编程》第七:Form API

    《精通HTML5编程》第七:Form API

    2014-11-16 20:49

网友点评
2