Worker

Web Workers APIWorker インターフェイスはバックグラウンドで行われるタスクを実行することができ、そのタスクは簡単に生成され、かつ作成元にメッセージを送り返すことができます。Worker() コンストラクターを呼び出しワーカースレッドを走らせるスクリプトを特定してあげるだけでワーカーオブジェクトを作成することができます。

ワーカーは同じ親ページの同一 オリジン 内でホストされている限り、他の新しいワーカーを発生させる可能性があります (注記: 入れ子の worker は WebKit で未実装です)。それにくわえて、ワーカーはネットワーク I/O のための XMLHttpRequest を使用することもあります。なお、XMLHttpRequestresponseXMLchannel 属性は常に null を返す決まりです。

必ずしも すべてのインターフェイスと関数Worker のスクリプトに関連づいているわけではありません。

Firefox において、ワーカーをエクステンションを用いて js-ctypes にアクセスしたい場合、ChromeWorker オブジェクトを代わりに使用しなくてはいけません。

コンストラクター

Worker()
特有の URL で動作する専用ワーカーのインスタンスを生成することができます。また、Blobs を用いてワーカーを生成することもできます。

プロパティ

EventTarget より継承しています。また、AbstractWorker のメソッドを定義しています。

イベントハンドラー

AbstractWorker.onerror
error タイプの ErrorEvent がワーカーを通して発生するとき、常に EventListener を呼びます。これは AbstractWorker からの継承メソッドです。
Worker.onmessage (en-US)
message タイプの MessageEvent がワーカーを通して発生するときは常に EventListener を呼びます。例えば、DedicatedWorkerGlobalScope.postMessage (en-US) を経由して親要素のドキュメントにメッセージが送信されます。メッセージは data (en-US) プロパティに保存されます。
Worker.onmessageerror
messageerror イベントが発生したときに呼び出されるコードを表す EventHandler です。

メソッド

EventTarget より継承しています。また、AbstractWorker のメソッドを定義しています。

Worker.postMessage() (en-US)
ワーカーの内部スコープにメッセージを送ることができます。このメッセージは、いかなる JavaScript のオブジェクトでも送ることができます。
Worker.terminate()
ワーカーを直ちに終了させます。実行中の処理は完了を待たずに終了させられます。ServiceWorker インスタンスはこのメソッドを備えていません。

次のコード例では、Worker() コンストラクターを用いて Worker オブジェクトを生成しています。

var myWorker = new Worker('worker.js');
var first = document.querySelector('#number1');
var second = document.querySelector('#number2');

first.onchange = function() {
  myWorker.postMessage([first.value,second.value]);
  console.log('Message posted to worker');
}

完全なサンプルは次のリンクより御覧ください:Basic dedicated worker example (run dedicated worker)。

仕様

仕様書 策定状況 コメント
HTML Living Standard
Worker の定義
現行の標準  

ブラウザー実装状況

BCD tables only load in the browser

worker の種類に応じてサポート状況が異なります。詳しくは、それぞれの worker のページをご覧ください。

クロスオリジン worker エラーの動作

古いバージョンのブラウザーでクロスオリジンの worker のスクリプトを読み込もうとすると、SecurityError が発生していました。仕様が変わったため、新しいブラウザーでは error イベントが発生します。この処理方法について詳しくは クロスオリジンの Worker 読み込みが例外の代わりに error イベントを発生させるようになり、サンドボックス化された iframe 内の Worker が禁止されます をご覧ください。

関連情報