--- title: Web Workers API slug: Web/API/Web_Workers_API tags: - API - DOM - Web Workers - Workers translation_of: Web/API/Web_Workers_API ---
{{DefaultAPISidebar("Web Workers API")}}

Web Worker とは、ウェブアプリケーションにおけるスクリプトの処理をメインとは別のスレッドに移し、バックグラウンドでの実行を可能にする仕組みのことです。時間のかかる処理を別のスレッドに移すことが出来るため、 UI を担当するメインスレッドの処理を中断・遅延させずに実行できるという利点があります。

Web Worker の概念と使い方

{{DOMxRef("Worker")}} オブジェクトは {{DOMxRef("Worker.Worker", "Worker()")}} などのコンストラクターで生成されるオブジェクトで、名前を持つ JavaScript ファイルを実行します。 Worker のスレッドで実行されるコードはこのファイルに書かれており、今いる {{DOMxRef("window")}} とは別のグローバルなコンテキストの中で Worker がコードを実行します。Dedicated Worker (専用ワーカー) の場合、そのコンテキストは {{DOMxRef("DedicatedWorkerGlobalScope")}} オブジェクトで表現されます (通常の Worker は単一のスクリプトで使用されますが、 Worker を共有する際は {{DOMxRef("SharedWorkerGlobalScope")}} を使用します)。

Worker のスレッドではあらゆるコードを実行できますが、いくつか例外があります。例えば、 Worker から DOM を直接操作することは出来ません。また、 {{DOMxRef("window")}} にデフォルトで用意されているメソッドやプロパティには Worker から使用できないものもあります。しかし、 WebSocketsIndexedDB のようなデータストレージに加え、 Firefox OS における Data Store API など、 window に含まれていても使用できるものは数多くあります。詳しくは Worker から使用できる関数とクラス を参照してください。

Worker とメインスレッドとの間では、メッセージのシステムを通してデータがやり取りされます。両者は postMessage() メソッドを使ってメッセージを送信し、受け取ったメッセージには onmessage イベントハンドラーで返信します (メッセージは {{Event("Message")}} イベントの data 属性に格納されます)。なお、送信したデータは受取先でコピーされます (共有ではありません)。

メインスレッドのページと同じオリジンであれば、 Web Workers は新しい Worker をいくつでも生成できます。また、 Worker はネットワーク I/O において XMLHttpRequest を使用しますが、 XMLHttpRequest における responseXMLchannel 属性は必ず null を返す点で通常と異なります。

Dedicated Worker の他にも、 Worker の種類には以下のようなものがあります。

メモ: Web Worker の仕様にあるように、Worker のエラーイベントはバブルするべきではありません (see {{bug(1188141)}}。これは Firefox 42 で実装されました。

 

Web Worker インターフェイス

{{DOMxRef("AbstractWorker")}}
{{DOMxRef("Worker")}} や {{DOMxRef("SharedWorker")}} など、すべての Worker に共通な抽象オブジェクトです。
{{DOMxRef("Worker")}}
実行している Worker のスレッドを表します。実行している Worker のコードへメッセージを送る際に用います。
{{DOMxRef("WorkerLocation")}}
{{DOMxRef("Worker")}} で実行されるスクリプトの絶対位置を定義します。
{{DOMxRef("SharedWorker")}}
複数のウィンドウ、 iframe、ワーカーなどいくつかの{{glossary("browsing context", "閲覧コンテキスト")}}から「アクセス可能な」具体的な種類の Worker を表します。
{{DOMxRef("WorkerGlobalScope")}}
{{DOMxRef("Window")}} のように通常のウェブコンテンツと同じ動作をする Worker の一般的なスコープを表します。これと異なる種類の Worker は、このインタフェースに独自の機能をいくつか加えたスコープを持ちます。
{{DOMxRef("DedicatedWorkerGlobalScope")}}
Dedicated Worker のスコープを表します。 {{DOMxRef("WorkerGlobalScope")}} を継承しており、独自の機能がいくつか加えられています。
{{DOMxRef("SharedWorkerGlobalScope")}}
Shared Worker のスコープを表します。 {{DOMxRef("WorkerGlobalScope")}} を継承しており、独自の機能がいくつか加えられています。
{{DOMxRef("WorkerNavigator")}}
ユーザエージェント (クライアント) に関する識別名と状態を表します。

簡単なデモと基本的な使い方は以下を参照してください。

このデモの動く仕組みを詳しく知りたい場合は Web Worker を使用するを参照してください。

仕様

仕様書 状態 備考
{{SpecName("HTML WHATWG", "workers.html#workers", "Web Workers")}} {{Spec2("HTML WHATWG")}} 初回定義

あわせて参照