调用 Worker 构造函数就可以简单创建一个 Worker 。 Web Workers 在初始化时会接受一个 JavaScript 文件的 URL 地址,参数 URI 表示要执行的脚本文件地址。其中包含了供 Worker 执行的代码。这段代码会设置事件监听器,并与生成 Worker 的容器进行通信。 JavaScript 文件的 URL 可以是相对或者绝对路径,只要是相同的协议、主机和端口即可。
worker = new Worker('echoWorker.js');
如果想获取 Worker 进程的返回值,可以通过 onmessage 属性来绑定一个事件处理程序。
var myWorker = new Worker('easyui.js');
myWorker.onmessage = function (event) {
alert('Called back by the worker!');
};
第一行用来创建和运行 Worker 进程,第 2 行设置 Worker 的 onmessage 属性用来绑定指定的事件处理程序,当 Worker 的 postMessage() 方法被调用时,这个被绑定的程序就会被触发。
对于由多个 Javascript 文件组成的 应用程序来说,可以通过 包含 script 的形式,在页面加载的时候同步加载 JavaScript 文件。由于 Web Workers 没有访问 document 的权限,所以只有用 importScript() 方法导入其它 JavaScript 文件。
importScripts() 函数可以接受空的参数或多个脚本 URL 参数,下面这些形式都是合法的。
importScripts();
importScripts('foo.js');
importScripts('foo.js', 'bar.js');
JavaScript 会加载列出的每一个脚本文件,然后运行并初始化。这些脚本中的任何全局对象都可以被 worker 使用。
importScripts 下载脚本顺序可能不一样,但执行的顺序一定是按 importScripts 中列出的顺序进行,而且是同步的,在所有脚本加载完并运行结束后 importScripts 才会返回。
Web Workers 能够嵌套使用,以创建子 Worker 。
var subWorker = new Worker('subWorker.js');
用户可以创建多个 Workers 。子 Worker 必须存在于同一个父页面下,且它的 URL 必须与父 Worker 的地址同源,这样可以很好地维持它们的依赖关系。
Web Workers 可以使用 setTimeout 和 setInterval 。如果希望 Web Workers 进程周期性地运行,而不是不停地循环下去的话,这两个方法非常有用。
Web Workers 发生错误时,会触发 error 事件,使用 error 事件处理函数可以处理,事件处理函数可以定义一个参数,该参数是一个 ErrorEvent 对象,有 3 个属性: message 表示是错误讯息; filename 是 Worker 执行的 JavaScript 文件名; lineno 则是发生错误的行号。例如可以定义如下代码:
worker.onerror = function (e) {
alert(' 于第 [' + e.lineno + ']行发生错误 : ' + e.message);
};