Web Workers API - Web API 接口參考 | MDN
https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_APIhtml
經過使用Web Workers,Web應用程序能夠在獨立於主線程的後臺線程中,運行一個腳本操做。這樣作的好處是能夠在獨立線程中執行費時的處理任務,從而容許主線程(一般是UI線程)不會所以被阻塞/放慢。git
使用構造函數(例如,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 :網絡
SharedWorker
。ChromeWorker
注意: 根據網絡worker規範, worker錯誤事件不該該冒泡(參見bug 1188141)。該規範已在Firefox 42中實現。函數
AbstractWorker
Worker
或
SharedWorker
)
Worker
SharedWorker
WorkerGlobalScope
Window
有相同的做用)。不一樣類型的worker都有從接口繼承做用於對象,而且能夠添加更多特定功能。
DedicatedWorkerGlobalScope
WorkerGlobalScope
,且可添加一些特有的功能。
SharedWorkerGlobalScope
WorkerGlobalScope
, 且可添加一些特有的功能。
WorkerNavigator
咱們建立了幾個簡單的demos以演示基本用法:oop
你能夠在使用web workers中找到有關這些demos是如何工做的更多信息。post
規範 | 狀態 | 評論 |
---|---|---|
HTML Living Standard | Living Standard | No change from Unknown. |