Firefox 3.1に追加されるWeb Workersとは

杉山貴章(オングス)
2009-01-13 17:00:00
  • このエントリーをはてなブックマークに追加

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件)
#1 anonymous   2009-01-13 17:46:19
タイトル変ですよ。
>>「Web Workers」あるいは「Web Worker Threads」あるいはと呼ばれるものがある
#2 tomita   2009-01-13 17:58:51
> #1

builder編集部 冨田です。誤記のご指摘、ありがとうございます。
該当個所を修正いたしました。

読者の皆さま、ならびに関係各位には深くお詫び申し上げます。
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]