Firefox 3.1に追加されるWeb Workersとは
JavaScriptでマルチスレッドプログラミング
「Web Workers」(ドキュメントによっては「Web Worker Threads」や「DOM Workers」と記述されている)は、一言で言ってしまえばJavaScriptにおいてマルチスレッド・プログラミングを可能にするもので、HTML 5と同じくWHATWGによって仕様の策定が進められている。仕様自体がドラフト段階だが、Firefoxでは3.1から標準となる新しいJavaScriptエンジン「TraceMonkey」において実装される予定で、基本機能はBeta 2ですでに利用可能となっている。なお、WHATWGによるドラフト仕様はこのサイトで見ることができるが、現時点でのFirefox 3.1による実装はこの仕様とは若干異なるので注意が必要。
基本となるのはWorkerというオブジェクトで、このオブジェクトのコンストラクタにJavaScriptのURLを渡すことで、渡されたスクリプトがメインのスクリプトとは別のスレッドで実行されるようになる。例えば「myworker.js」というファイルに実行したいスクリプトが記述されている場合、リスト1のようにすることでWorkerオブジェクトが生成され、スクリプトの処理が別スレッドで実行される。
リスト1 Workerオブジェクトの生成
var worker = new Worker('myworker.js');
Workerオブジェクトには以下のメソッドとイベントリスナが定義されている。
- postMessage()メソッド - Workerスレッドに対してメッセージを送る
- onmessageリスナ - Workerスレッドからメッセージが送られた際に発生するmessageイベントを受け取る
- onerrorリスナ - エラーが発生した場合に通知されるerrorイベントを受け取る
postMessage()には文字列のみ渡すことができる。そこでオブジェクトのデータを渡したい場合にはJSONなどを利用する。逆に、Workerスレッドからメッセージが送られた場合にはmessageイベントが発生するため、onmessageリスナを定義することでこれを受け取ることができる。メッセージはイベントオブジェクトのdataプロパティに格納されている。
次回はWorkerスレッド側の処理について解説する。
- コメント(2件)
builder編集部 冨田です。誤記のご指摘、ありがとうございます。
該当個所を修正いたしました。
読者の皆さま、ならびに関係各位には深くお詫び申し上げます。
- ホワイトペーパー




>>「Web Workers」あるいは「Web Worker Threads」あるいはと呼ばれるものがある