自 crbug.com/73313 起,Chrome 13 和 FF5 支援將 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
複製到 worker 的結構定義,反之亦然。這為前所未見的員工帶來真正的潛在潛力。也就是說,可以輕鬆在主要應用程式和工作站執行緒之間傳送二進位資料。
型別陣列 I/O 會大幅簡化圖片操縱、聲音處理和大量 WebGL 計算。舉例來說,可以將檔案做為陣列緩衝區讀取,或使用 XHR2 擷取 Blob,然後將結果直接傳遞給工作站。資料沒有其他 Base64 編碼方式 :)
我認為這是第一線員工應從一開始就納入其中。聽起來也合理。