經過使用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.
相關文章
相關標籤/搜索