HTML5 Web Workers 可以让 Web 应用程序具备后台处理能力。它支持多线程处理功能,因此使用了 HTML5 的 JavaScript 应用程序可以充分利用多核 CPU 带来的优势。将耗时长的任务分配给 HTML5 Web Workers 执行,这样就避免了页面有时反应迟缓,甚至假死现象。 Web Workers 可以创建一个不影响前台处理的后台线程,并且在这个后台线程中创建多个子线程。这样可以将耗时较长的处理交给后台线程去运行,从而解决了 HTML5 之前因为某个处理耗时过长而提示用户脚本运行时间过长,导致用户不得不结束这个处理的尴尬状况。
Web Workers 为网页脚本提供了一种能在后台进程中运行的方法。当创建 Worker 对象后, Web Workers 就可以通过 postMessage 方法向任务池发送任务请求,执行完之后再通过 postMessage 返回消息给创建者指定的事件处理程序,然后通过 onmessage 捕获返回消息,实现前后台数据的交互。
在 Web Workers 中执行的脚本不能访问该页面的 window 对象,因此 Web Workers 不能直接访问 Web 页面和 DOM API ,虽然 Web Workers 不会导致浏览器 UI 停止响应,但是仍然会消耗 CPU 周期,导致系统反应速度变慢。
如果开发人员创建的 Web 应用程序需要执行一些后台数据处理,但又不希望这些数据处理任务影响 Web 页面本身的交互性,那么可以通过 Web Workers 生成一个 Worker 去执行数据处理任务。同时添加一个事件监听器进行监听,并与之进行数据交互。
Web Workers 的另一个用途是可以监听由后台服务器广播的消息,收到后台服务器的消息后,将其显示在 Web 页面上。这种与后台服务器对话的场景, Web Workers 可能会使用到 Web Sockets 或 Server-Sent 事件。
Web Workers 接口可以创建真正的系统级别的进程,还可以使用 XMLHttpRequest 来处理 I/O ,无论 responseXML 和 channel 属性是否为 null 。使用它可以很容易设计并发操作效果,这将会很有趣。例如,在做网站下载的时候使用 Worker ,或者使用 Worker 实现处理扩展功能。
后台进程(包括 Web Workers 进程)不能对 DOM 进行操作。如果希望后台程序处理的结果能够改变 DOM ,只能通过返回消息给创建者的回调函数进行处理。