Pekerja ♥ ArrayBuffer

Mulai crbug.com/73313, Chrome 13 dan FF5 mendukung pengiriman ArrayBuffer (atau Typed Array) ke/dari Web Worker. Contoh:

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);

Mengapa ini menarik?...data biner!

Browser tidak melakukan serialisasi data postMessage() ke objek JSON, melainkan menggunakan algoritma clone terstruktur untuk menyalin ArrayBuffer ke konteks pekerja, dan sebaliknya. Hal ini membuka potensi nyata bagi pekerja yang belum pernah kita lihat sebelumnya. Artinya, kemampuan untuk meneruskan data biner antara aplikasi utama dan thread pekerja dengan mudah.

I/O array yang diketik membuat manipulasi gambar yang intens, pemrosesan suara, dan penghitungan WebGL yang berat menjadi jauh lebih mudah. Misalnya, seseorang dapat membaca File sebagai buffering array atau mengambil Blob menggunakan XHR2 dan meneruskan hasilnya langsung ke pekerja. Tidak perlu lagi mengenkode data base64 :)

Menurut saya, ini adalah salah satu {i>nitlet<i} worker yang harus disertakan sejak awal. Itu masuk akal.