Werknemers ♥ ArrayBuffer

Vanaf crbug.com/73313 ondersteunen Chrome 13 en FF5 het verzenden van een ArrayBuffer (of Typed Array) naar/van een webwerker. Bijvoorbeeld:

werknemer.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);
};

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

Waarom is dit spannend?...binaire gegevens!

In plaats van dat de browser uw postMessage() gegevens serialiseert naar een JSON-object, gebruikt deze het gestructureerde kloonalgoritme om de ArrayBuffer naar de context van de werker te kopiëren, en omgekeerd. Dit opent een reëel potentieel voor werknemers dat we nog niet eerder hebben gezien. Dat wil zeggen, het gemakkelijk kunnen doorgeven van binaire gegevens tussen de hoofdapp en de werkthread.

Typed array I/O maakt intensieve beeldmanipulatie, geluidsverwerking en zware WebGL-berekeningen veel haalbaarder. U kunt bijvoorbeeld een bestand lezen als een arraybuffer of een blob ophalen met XHR2 en het resultaat rechtstreeks doorgeven aan een werker. Geen base64-codering meer van de gegevens :)

Naar mijn mening is dit een van de muggenzifters die werknemers vanaf het begin hadden moeten opnemen. Het is gewoon logisch.