Procesory ♥ Buffer

Od crbug.com/73313 Chrome 13 i FF5 obsługują wysyłanie danych typu ArrayBuffer (lub tablicy typu) do/z instancji internetowej. Na przykład:

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

Dlaczego to ekscytujące?...dane binarne!

Zamiast serializować dane postMessage() w postaci obiektu JSON, przeglądarka używa algorytmu strukturalnego klonowania do kopiowania obiektu ArrayBuffer do kontekstu pracownika i odwrotnie. To otwiera przed pracownikami nowe możliwości, których wcześniej nie było. Oznacza to możliwość łatwego przekazywania danych binarnych między główną aplikacją a wątkiem instancji roboczej.

Wejście/wyjście typu tablicy znacznie ułatwia wykonywanie intensywnych manipulacji obrazami, przetwarzania dźwięku i intensywnych obliczeń WebGL. Można na przykład wczytać plik jako tablicowy bufor lub pobierać obiekt blob za pomocą XHR2 i przekazywać wynik bezpośrednio do workera. Nie trzeba już kodować danych w formacie base64 :)

Moim zdaniem jest to jeden z tych drobiazgów, które pracownicy powinni uwzględnić od samego początku. To ma sens.