Çalışanlar ♥ ArrayBuffer

crbug.com/73313 itibarıyla Chrome 13 ve FF5, bir Web İşleyici'ye/Web İşleyici'den ArrayBuffer (veya Typed Array) göndermeyi destekler. Örneğin:

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

Bu neden heyecan verici?...ikili veriler!

Tarayıcı, postMessage() verilerinizi JSON nesnesine serileştirmek yerine ArrayBuffer'ı işleyicinin bağlamına kopyalamak için yapılandırılmış kopya algoritmasını kullanır ve bunun tam tersini de yapar. Bu, çalışanlar için daha önce hiç görülmemiş bir potansiyel sunuyor. Yani, ana uygulama ile çalışan iş parçacığı arasında ikili verileri kolayca iletebilme.

Tanımlanmış dizi G/Ç, yoğun görüntü manipülasyonu, ses işleme ve yoğun WebGL hesaplamalarını çok daha uygulanabilir hale getirir. Örneğin, bir dosyayı dizi arabelleği olarak okuyabilir veya XHR2 kullanarak Blob'u getirip sonuç doğrudan bir çalışana iletilebilir. Artık verileri base64 kodlamanız gerekmiyor :)

Bence bu, çalışanların baştan eklemesi gereken ayrıntılardan biri. Bu mantıklı.