--- title: Web Workers API slug: Web/API/Web_Workers_API tags: - API - DOM - Service Workers - Shared Workers - Web Workers - Workers translation_of: Web/API/Web_Workers_API ---

{{DefaultAPISidebar("Web Workers API")}}

通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。

Web Workers 概念与用法

使用构造函数(例如,{{domxref("Worker.Worker", "Worker()")}})创建一个 worker 对象, 构造函数接受一个 JavaScript文件URL — 这个文件包含了将在 worker 线程中运行的代码。worker 将运行在与当前 {{domxref("window")}}不同的另一个全局上下文中,这个上下文由一个对象表示,标准情况下为{{domxref("DedicatedWorkerGlobalScope")}} (标准 workers 由单个脚本使用; 共享workers使用{{domxref("SharedWorkerGlobalScope")}})。

你可以在worker 线程中运行任意的代码,但注意存在一些例外:直接在 worker 线程中操纵 DOM 元素;或使用{{domxref("window")}} 对象中的某些方法和属性。大部分 window 对象的方法和属性是可以使用的,包括 WebSockets,以及诸如 IndexedDB 和 FireFox OS 中独有的 Data Store API 这一类数据存储机制。更多信息请参见: Functions and classes available to workers 。

主线程和 worker 线程相互之间使用 postMessage() 方法来发送信息, 并且通过 onmessage 这个 event handler来接收信息(传递的信息包含在 {{event("Message")}} 这个事件的data属性内) 。数据的交互方式为传递副本,而不是直接共享数据。

worker 可以另外生成新的 worker,这些 worker 与它们父页面的宿主相同。 此外,worker 可以通过 XMLHttpRequest 来访问网络,只不过 XMLHttpRequest 的 responseXML 和 channel 这两个属性的值将总是 null 。

除了专用 worker 之外,还有一些其他种类的 worker :

注意: 根据网络worker规范, worker错误事件不应该冒泡(参见{{bug(1188141)}})。该规范已在Firefox 42中实现。

Web Worker 接口

{{domxref("AbstractWorker")}}
抽象属性和方法是所有类型的worker中常用的(例如{{domxref("Worker")}}或 {{domxref("SharedWorker")}})
{{domxref("Worker")}}
表示正在运行的worker线程,允许你将信息传递到正在运行的worker程序代码。
{{domxref("SharedWorker")}}
表示一种可以同时被多个浏览器环境访问的特殊类型的worker。这些浏览器环境可以是多个window, iframes 或者甚至是多个worker.
{{domxref("WorkerGlobalScope")}}
表示任意worker的通用作用域(对于正常的网页类容来说与{{domxref("Window")}} 有相同的作用)。不同类型的worker都有从接口继承作用于对象,并且可以添加更多特定功能。
{{domxref("DedicatedWorkerGlobalScope")}}
表示一个专用worker的作用域, 继承自{{domxref("WorkerGlobalScope")}},且可添加一些特有的功能。
{{domxref("SharedWorkerGlobalScope")}}
表示一个共享worker的作用域, 继承自{{domxref("WorkerGlobalScope")}}, 且可添加一些特有的功能。
{{domxref("WorkerNavigator")}}
表示用户代理(客户端)的身份和状态。

示例

我们创建了几个简单的demos以演示基本用法:

你可以在使用web workers中找到有关这些demos是如何工作的更多信息。

规范

规范 状态 评论
{{SpecName('HTML WHATWG', '#toc-workers')}} {{Spec2('HTML WHATWG')}} No change from {{SpecName("Web Workers")}}.
{{SpecName('Web Workers')}} {{Spec2('Web Workers')}} Initial definition.

相关链接