Safariでクラッシュしないようにする
サンプル8のプログラムをSafari 5で実行するとクラッシュする場合があります。Safari 5で正しく動作させるには、ワーカー内で実行するスクリプト(analysis.js)の以下の1行を書き換えます。
var pixels = event.data.imageData;
↓
var pixels = event.data.imageData.data;
呼び出す側では以下の1行を書き換えます。
var img = context.getImageData(0, 0, canvasW, canvasH).data;
↓
var img = context.getImageData(0, 0, canvasW, canvasH);
これでSafari 5でもクラッシュせずに動作します。ただし、このプログラムはFirefox 3.6で動作しなくなります(Firefox 4ではOK)。
◆
Web Workersは負荷の高い処理をバックグランドで実行するには非常に便利な機能です。非同期通信やWebSocketなどとも組み合わせられますし、今回は説明しませんでしたが共有ワーカーという機能もあります。
最後に、サンプル8を各ブラウザーで実行したときのCPU負荷の状態を紹介します。Operaでは空いているCPUに適度に処理が割り当てられ、CPU全体のパワーの半分程度しか使用されていません。Chromeでは負荷が少ないので詳しくは分かりませんが、メインの処理と表示処理、CPUの数だけ適度に分散されるようです。FirefoxとSafariではCPUの数だけ処理が分散されますが、Firefoxでは全体的に負荷が高くなるようです。こうしたブラウザーによる違いを確認しながら試してみてください。