Web Workers API の Worker
インターフェイスはバックグラウンドで行われるタスクを実行することができ、そのタスクは簡単に生成され、かつ作成元にメッセージを送り返すことができます。Worker()
コンストラクターを呼び出しワーカースレッドを走らせるスクリプトを特定してあげるだけでワーカーオブジェクトを作成することができます。
ワーカーは同じ親ページの同一 オリジン 内でホストされている限り、他の新しいワーカーを発生させる可能性があります (注記: 入れ子の worker は WebKit で未実装です)。それにくわえて、ワーカーはネットワーク I/O のための XMLHttpRequest
を使用することもあります。なお、XMLHttpRequest
の responseXML
と channel
属性は常に null
を返す決まりです。
必ずしも すべてのインターフェイスと関数 が Worker
のスクリプトに関連づいているわけではありません。
Firefox において、ワーカーをエクステンションを用いて js-ctypes にアクセスしたい場合、ChromeWorker
オブジェクトを代わりに使用しなくてはいけません。
コンストラクター
プロパティ
EventTarget
より継承しています。また、AbstractWorker
のメソッドを定義しています。
イベントハンドラー
AbstractWorker.onerror
error
タイプのErrorEvent
がワーカーを通して発生するとき、常にEventListener
を呼びます。これはAbstractWorker
からの継承メソッドです。Worker.onmessage
message
タイプのMessageEvent
がワーカーを通して発生するときは常にEventListener
を呼びます。例えば、DedicatedWorkerGlobalScope.postMessage
を経由して親要素のドキュメントにメッセージが送信されます。メッセージはdata
プロパティに保存されます。Worker.onmessageerror
messageerror
イベントが発生したときに呼び出されるコードを表すEventHandler
です。
メソッド
EventTarget
より継承しています。また、AbstractWorker
のメソッドを定義しています。
Worker.postMessage()
- ワーカーの内部スコープにメッセージを送ることができます。このメッセージは、いかなる 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 が禁止されます をご覧ください。
関連情報
- Web Workers の使い方
- Web Workers で使用可能な関数一覧
- 他の Workers:
SharedWorker
、 ServiceWorker. - 非標準の Gecko 専用 Workers:
ChromeWorker
(拡張機能で使用)