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

杉山貴章(オングス)
2009/01/13 17:00

Firefox 3.1に追加される予定の新機能の中に「Web Workers」あるいは「Web Worker Threads」と呼ばれるものがある。今回はこの新機能について紹介しよう。

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編集部 冨田です。誤記のご指摘、ありがとうございます。 該当個所を修正いたしました。 読者の皆さま、ならびに関... 続きを見る
» 不適切なコメントを報告する
記事に関係する情報をコメントでお寄せください

ニックネーム : CNET_IDにログインしてコメントする

コメント本文(必須) :
  • 昨日のトップ記事
  • 2日前
  • 3日前
  • 8日前
  • 9日前
  • 新着記事
  • 人気記事
  • 特集
  • ブログ