Çalışanlar ♥ ArrayBuffer

Eric Bidelman

crbug.com/73313 tarihinden itibaren Chrome 13 ve FF5, bir Web Çalışanına ArrayBuffer (veya Yazılı Dizi) göndermeyi desteklemektedir. Ö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 veri!

Tarayıcının postMessage() verilerinizi bir JSON nesnesi olarak serileştirmek yerine ArrayBuffer öğesini çalışanın bağlamına kopyalamak için yapılandırılmış klon algoritmasını (veya bunun tersini) kullanır. Bu da çalışanlar için daha önce hiç karşılaşmadığımız gerçek bir potansiyel ortaya çıkarıyor. Yani, ikili program verilerini ana uygulama ile çalışan iş parçacığı arasında kolayca geçirebilmek.

Türlü dizi G/Ç, yoğun görüntü değiştirme, ses işleme ve yoğun WebGL hesaplamalarını çok daha uygun hale getirir. Örneğin, bir dosya dizi arabelleği olarak okunabilir veya XHR2 kullanarak bir Blob getirilebilir ve sonuç doğrudan bir çalışana aktarılabilir. Artık veriler base64 kodlamasına gerek yok :)

Bence bu, niteliğe sahip çalışanların en baştan dahil etmesi gerekenlerden biri. Gayet makul.