Web Workersで遊んでみた

HTML5を含む次世代Web規格の一環として、ページ描画・処理のバックグラウンドで処理を実行できるWeb Workersという仕様が策定されています。

既にFirefox 3.5やSafari 4等では一部の機能が実装されているそうなので試してみました。Web Workersでエラトステネスの篩を実行し、素数を探す簡単なJavaScriptです。普通JavaScript実行中はブラウザ操作ができなくなりますが、Web Workersを使うと、ページ描画とは別スレッドで実行されるため、ブラウザが固まりません。

Safari 4のNitroエンジンの処理速度は異常ですね…、1000000以下の最大素数の計算でFirefoxと比べて約10倍の速度です。Firefox 3.5も相当速くなっているんですけどね〜。

このWeb Workers、バックグラウンドでWeb Socketsを使ってデータをサーバから取得し、Web Databaseに保存するといった用途が想定されています。また、暗号化・復号、ハッシュ値計算などの重い処理をブラウザで行うのも現実的になると思われます。

制限として、Web WorkersスレッドからのDOM操作はできず、windowなどのブラウザオブジェクトへのアクセスもできません。通常のGUIプログラミングでも、GUI要素への複数スレッドからアクセスは禁止されているので、これは一般的な仕様でしょう。