crbug.com/73313 時点で、Chrome 13 と FF5 は、ArrayBuffer
(または型付き配列)を Web Worker との間で送受信できます。例:
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 計算が大幅に容易になります。たとえば、ファイルを配列バッファとして読み取るか、XHR2 を使用して Blob を取得し、結果をワーカーに直接渡すことができます。データを base64 エンコードする必要がなくなりました。
私の意見では、これは、従業員が最初から含めるべきだった細かい点の一つです。当然の流れです。