Procesory ♥ Buffer

Od crbug.com/73313, Chrome 13 i FF5 obsługują wysyłanie instrukcji ArrayBuffer (lub tablicy wpisanej) do/z instancji roboczej. 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 te dane są ekscytujące?...

Zamiast serializacji danych postMessage() w obiekcie JSON przeglądarka używa algorytmu klona ustrukturyzowanego, aby skopiować ArrayBuffer do kontekstu instancji roboczej i odwrotnie. Otwiera to prawdziwy potencjał dla pracowników, jakiego wcześniej nie widzieli. Oznacza to, że można łatwo przesyłać dane binarne między główną aplikacją a wątkiem roboczym.

Wejście-wyjście matrycowe z wykorzystaniem macierzowego interfejsu znacznie ułatwia manipulację obrazem, przetwarzanie dźwięku i przeprowadzanie skomplikowanych obliczeń w interfejsie WebGL. Można na przykład odczytać plik jako bufor tablicy lub pobrać obiekt blob za pomocą XHR2 i przekazać wynik bezpośrednio do instancji roboczej. Koniec z kodowaniem danych w base64 :)

Moim zdaniem to jest jeden z tych kujonów, który od samego początku powinien był uwzględnić w tym miejscu. Ma sens.