现在,嵌入式 worker 已经嵌套进了一个自定义的document.worker属性中。
超时与间隔
Worker 能够像主线程一样使用超时与间隔。这会十分有用,比如说,如果你想让 worker 线程周期性而并非不间断的运行代码。
终止 worker
如果你想立即终止一个运行中的 worker,可以调用 worker 的terminate()方法:
| myWorker.terminate(); |
worker 线程会被立即杀死,不会留下任何机会让它完成自己的操作或清理工作。
Workers 也可以调用自己的nsIWorkerScope.close()方法来关闭自己:
| self.close(); |
处理错误
当 worker 出现运行时错误时,它的onerror事件处理函数会被调用。它会收到一个实现了ErrorEvent接口名为error的事件。该事件不会冒泡,并且可以被取消;为了防止触发默认动作,worker 可以调用错误事件的preventDefault()方法。错误事件拥有下列三个它感兴趣的字段:
message
可读性良好的错误消息。
filename
发生错误的脚本文件名。
lineno
发生错误时所在脚本文件的行号。
访问 navigator 对象
Workers 可以在它的作用域内访问navigator对象。它含有如下能够识别浏览器的字符串,就像在普通脚本中做的那样:
appName appVersion platform userAgent引入脚本与库
Worker 线程能够访问一个全局函数,importScripts(),该函数允许 worker 将脚本或库引入自己的作用域内。你可以不传入参数,或传入多个脚本的 URI 来引入;以下的例子都是合法的:
| importScripts(); /* 什么都不引入 */ importScripts('foo.js'); /* 只引入 "foo.js" */ importScripts('foo.js', 'bar.js'); /* 引入两个脚本 */ |
浏览器将列出的脚本加载并运行。每个脚本中的全局对象都能够被 worker 使用。如果脚本无法加载,将抛出NETWORK_ERROR异常,接下来的代码也无法执行。而之前执行的代码(包括使用window.setTimeout()延迟执行的代码)却依然能够使用。importScripts()之后的函数声明依然能够使用,因为它们始终会在其他代码之前运行。注意:脚本的下载顺序不固定,但执行时会按照你将文件名传入到importScripts()中的顺序。这是同步完成的;直到所有脚本都下载并运行完毕,importScripts()才会返回。
例子
本节提供了几个如何使用 DOM worker 的例子。
在后台执行运算
worker 的一个优势在于能够执行处理器密集型的运算而不会阻塞 UI 线程。在下面的例子中,worker 用于计算斐波那契数。
JavaScript 代码
下面的 JavaScript 代码保存在「fibonacci.js」文件中,与下一节的 HTML 文件关联。









