Worker

Web Workers API Worker 接口代表一个可以轻松创建的后台任务,并可以将消息发送回其创建者。创建一个工作程序只要简单的调用Worker() 构造函数,并指定一个要在工作线程中运行的脚本。

一个值得注意的事实是:worker 能够产生出新的 worker,前提是这些 worker 托管于相同的源内来作为它们的父页面。 此外,worker 还能够使用 XMLHttpRequest 实现网络 I/O 操作, 只不过 XMLHttpRequest 上的 responseXML 与 channel 两个属性值始终返回 null。

 workder 支持的函数 页面提供了一个 worker 支持的全局函数列表。

Gecko 2.0 note
(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)

如果你想在扩展中使用 worker,并希望能够访问到 js-ctypes, 那么你应该使用 ChromeWorker 对象来代替 worker。

使用 web worker 提供了例子与细节描述。

方法概述

Worker (in DOMString scriptURL)

void postMessage(in JSObject message);

void terminate();

属性

Property Type Description
onmessage EventListener 一个事件监听函数,每当拥有 message 属性的 MessageEvent 从 worker 中冒泡出来时就会执行该函数。事件的 data 属性存有消息内容。
onerror EventListener 一个事件监听函数,每当类型为  error 的  ErrorEvent 从 worker 中冒泡出来时就会执行该函数。

错误信息对象

错误信息对象包含三个属性:

message
一个可读性良好的错误信息。
filename
产生错误的脚本文件名。
lineno
发生错误时所在的脚本文件行号。

构造函数

Worker()

该构造函数创建一个 web worker,它能执行位于指定 URL 上的脚本。脚本必须遵循 同源策略。 需要注意的是,浏览器制造商对于 data URI 是否需要同源存在分歧。虽然 Gecko 10.0 (Firefox 10.0 / Thunderbird 10.0 / SeaMonkey 2.7) 以及后续版本都接受 data URI,但其他浏览器却并非如此。

Worker(
  in DOMString aStringURL
);
参数
aStringURL
worker 将要执行的脚本的 URL。它必须遵循同源策略(或是 Gecko 10.0 及后续版本支持的 data URI)。
返回值

一个新的 Worker。

方法

postMessage()

向 worker 的内部作用域内传递消息。该方法接收一个单独的参数,即要传递给 worker 的数据。数据可以是任何值或者是经过结构化拷贝算法处理过的 JavaScript 对象,换句话说,可以包含循环引用。

void postMessage( Object aMessage [, sequence<Transferable> transferList]);
参数
aMessage
传输给 worker 的对象;它将包含于传递给 onmessage 处理函数的事件对象中的 data 字段内。你可以传递任意值或是经过结构化拷贝算法处理过的 JavaScript 对象,即可以包含循环引用。
transferList
一个可选的对象数组,用于转让它们的所有权。如果一个对象的所有权被转让,那么它在原来的上下文内将不可使用,而只能在转让到的 worker 内可用。
规范可知, 只有 MessagePort 与 ArrayBuffers 对象能被转让。

terminate()

立即终止 worker。该方法不会给 worker 留下任何完成操作的机会;就是简单的立即停止。

void terminate();

示例

下面的代码通过构造函数 Worker()  创建了一个 Worker 对象。

var myWorker = new Worker('worker.js');
var first = document.querySelector('#number1');
var second = document.querySelector('#number2');
first.onchange = function() {
  myWorker.postMessage([first.value,second.value]);
  console.log('Message posted to worker');
}

完整的示例,请查阅 Basic dedicated worker example (run dedicated worker).

规范

规范 状态 说明
HTML Living Standard
Worker
Living Standard Unknown
Unknown
Worker
Unknown 初始定义。

浏览器兼容性

不同类型的worker兼容度不一致,详细参考具体定义的页面。

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 4 3.5 10.0 10.6 4
Feature Android Firefox Mobile (Gecko) Firefox OS (Gecko) IE Phone Opera Mobile Safari Mobile Chrome for Android
Basic support 4.4 3.5 1.0.1 10.0 11.5 5.1 ?

相关链接

文档标签和贡献者