Trabajadores ♥ ArrayBuffer

A partir de crbug.com/73313, Chrome 13 y FF5 admiten el envío de un ArrayBuffer (o array escrito) a/desde un trabajador web. Por ejemplo:

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

¿Por qué son emocionantes? ¡Los datos binarios!

En lugar de que el navegador serialice tus datos de postMessage() en un objeto JSON, usa el algoritmo de clonación estructurado para copiar ArrayBuffer en el contexto del trabajador, y viceversa. Esto abre un potencial real para los trabajadores que no habíamos visto antes. Es decir, se puede pasar fácilmente datos binarios entre la app principal y el subproceso de trabajo.

Las E/S de array tipográficos hacen que la manipulación intensa de imágenes, el procesamiento de sonido y los cálculos pesados de WebGL sean mucho más viables. Por ejemplo, puedes leer un archivo como un búfer de array o recuperar un BLOB mediante XHR2 y pasar el resultado directamente a un trabajador. Ya no habrá más codificación base64 para codificar los datos :)

En mi opinión, este es uno de esos trabajadores meticulosos que debería haber incluido desde el principio. Tiene sentido.