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

 

Web Workers API - Web API 接口参考 | MDN
https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_APIhtml

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

Web Workers 概念与用法

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

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

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

worker 能够另外生成新的 worker,这些 worker 与它们父页面的宿主相同。 此外,worker 能够经过 XMLHttpRequest 来访问网络,只不过 XMLHttpRequest 的 responseXML 和 channel 这两个属性的值将老是 null 。服务器

除了专用 worker 以外,还有一些其余种类的 worker :网络

  • Shared Workers 可被不一样的窗体的多个脚本运行,例如IFrames等,只要这些workers处于同一主域。共享worker 比专用 worker 稍微复杂一点 — 脚本必须经过活动端口进行通信。详情请见SharedWorker
  • Service Workers 通常做为web应用程序、浏览器和网络(若是可用)之间的代理服务。他们旨在(除开其余方面)建立有效的离线体验,拦截网络请求,以及根据网络是否可用采起合适的行动,更新驻留在服务器上的资源。他们还将容许访问推送通知和后台同步API。
  • Chrome Workers 是一种仅适用于firefox的worker。若是您正在开发附加组件,但愿在扩展程序中使用worker且能够访问 js-ctypes,那么可使用Chrome Workers。详情请见ChromeWorker
  • 音频 Workers能够在网络worker上下文中直接完成脚本化音频处理.

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

Web Worker 接口

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

示例

咱们建立了几个简单的demos以演示基本用法:oop

你能够在使用web workers中找到有关这些demos是如何工做的更多信息。post

规范

规范 状态 评论
HTML Living Standard Living Standard No change from Unknown.
相关文章
相关标签/搜索