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 hal ini menarik?...data biner!

Browser tidak akan melakukan serialisasi data postMessage() Anda ke objek JSON, tetapi 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, dapat dengan mudah meneruskan data biner antara aplikasi utama dan thread pekerja.

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

Menurut saya, ini adalah salah satu hal kecil yang seharusnya disertakan pekerja sejak awal. Hal ini masuk akal.