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 melakukan serialisasi data postMessage() Anda ke objek JSON, tetapi akan 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 thread aplikasi utama dan thread pekerja.

I/O array jenis membuat manipulasi gambar yang intens, pemrosesan suara, dan penghitungan WebGL yang berat menjadi lebih mungkin dilakukan. Misalnya, seseorang dapat membaca File sebagai buffer array atau mengambil Blob menggunakan XHR2 dan meneruskan hasilnya langsung ke worker. Tidak perlu lagi mengenkode data dengan base64 :)

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