ワーカー ❤ ArrayBuffer

Eric Bidelman 氏

crbug.com/73313 より、Chrome 13 と FF5 では Web Worker との間の ArrayBuffer(型付き配列)の送受信がサポートされています。例:

worker.js

self.onmessage = function(e) {
    var uInt8Array = e.data;
    postMessage("Inside worker.js: uInt8Array.toString() = " + uInt8Array.toString());
    postMessage("Inside worker.js: uInt8Array.byteLength = " + uInt8Array.byteLength);
};

main.html

var uInt8Array = new Uint8Array(new ArrayBuffer(10));
for (var i = 0; i < uInt8Array.length; ++i) {
    uInt8Array[i] = i * 2; // [0, 2, 4, 6, 8,...]
}

console.log('uInt8Array.toString() = ' + uInt8Array.toString());
console.log('uInt8Array.byteLength = ' + uInt8Array.byteLength);

worker.postMessage(uInt8Array);

なぜこれが興味深いのか、バイナリ データについてです。

ブラウザは、postMessage() データを JSON オブジェクトにシリアル化するのではなく、構造化クローン アルゴリズムを使用して、ArrayBuffer をワーカーのコンテキストにコピーします(またはその逆)。これにより、これまでにない労働者に大きな可能性がもたらされます。つまり、メインアプリとワーカー スレッドの間でバイナリデータを簡単に受け渡しできることです。

型付き配列 I/O により、負荷の高い画像操作、音声処理、負荷の高い WebGL 計算がはるかに簡単になります。たとえば、File を配列バッファとして読み取ることや、XHR2 を使用して Blob をフェッチして、結果をワーカーに直接渡すことができます。データを Base64 でエンコードする必要はない

私の意見では、これはワーカーが最初から含めるべきだったものの一つです。これは当然の流れです