HTML5之Web Worker

Web Worker处在一个自包含的执行环境中,无法访问Window对象和Document对象,和主线程之间的通信也只能通过异步消息传递机制来实现。

Web Worker提供了一种使用异步API的方式,允许书写需要长时间运行的函数而不会带来循环事件和导致浏览器崩溃的问题。

Worker对象

要创建一个新的worker,只需使用Worker()构造函数,并将指定在Worker中运行的JavaScript脚本的URL传递给该构造函数即可:

var loader = new Worker('utils/loader.js');

如果URL是相对路径,则以包含调用Worker()构造函数脚本的文档的URL为参照;如果URL是绝对路径,则必须和包含该脚本的文档是同源的(同样的协议、主机名和端口)。

一旦获取到Worker对象后,就可以通过postMessage()方法来传递参数了。

可以通过监听worker对象上的message事件来接收来自worker的消息:

worker.onmessage = function(e){
  var message = e.data;
  console.log(message);
}

当worker抛出了异常,并且它自己没有对其进行捕获和处理,则可以作为监听的一个error事件来传递该异常:

worker.onerror = function(e) {
   console.log("Error at " + e.filename + ": " + e.lineno + ": " + e.message);
}

和所有的事件目标一样,worker对象也定义了标准的addEventListener()方法和removeEventListener()方法,如果要管理多个事件处理程序,则可以使用这些方法来代替onmessage和onerror。

worker对象还有另一个方法:terminate()。该方法强制一个worker线程结束运行。

在worker代码中可以使用importScripts()方法加载需要的其他代码。

importScripts()方法接受一个或多个URL参数,每个URL都需指向一个JavaScript代码文件。

相关推荐