ข้อมูล ณ 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
ไปยังบริบทของเวิร์กเกอร์ และในทางกลับกัน การดำเนินการนี้เปิดโอกาสใหม่ๆ ให้กับผู้ปฏิบัติงานอย่างที่ไม่เคยมีมาก่อน กล่าวคือ ความสามารถในการส่งข้อมูลไบนารีระหว่างแอปหลักกับเธรดผู้ปฏิบัติงานได้อย่างง่ายดาย
I/O ของอาร์เรย์ที่กําหนดประเภททําให้การจัดการรูปภาพอย่างละเอียด การประมวลผลเสียง และการคำนวณ WebGL จำนวนมากเป็นไปได้มากขึ้น เช่น ผู้ใช้อาจอ่านไฟล์เป็นบัฟเฟอร์อาร์เรย์หรือดึงข้อมูล Blob โดยใช้ XHR2 และส่งผลลัพธ์ไปยังเวิร์กเกอร์โดยตรง ไม่ต้องเข้ารหัสข้อมูลเป็น Base64 อีกต่อไป :)
ในความคิดของฉัน นี่เป็นหนึ่งในข้อจำกัดความรับผิดเล็กๆ น้อยๆ ที่ควรระบุไว้ตั้งแต่ต้น เพราะมันสมเหตุสมผล