crbug.com/73313부터 Chrome 13 및 FF5는 ArrayBuffer
(또는 유형 배열)를 웹 워커로 또는 웹 워커에서 전송하는 것을 지원합니다. 예를 들면 다음과 같습니다.
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);
이게 왜 흥미로운가요?...바이너리 데이터!
브라우저는 postMessage()
데이터를 JSON 객체로 직렬화하는 대신 구조화된 클론 알고리즘을 사용하여 ArrayBuffer
를 작업자 컨텍스트에 복사하고 그 반대로도 복사합니다. 이를 통해 이전에는 볼 수 없었던 근로자의 잠재력을 실현할 수 있습니다. 즉, 기본 앱과 작업자 스레드 간에 바이너리 데이터를 쉽게 전달할 수 있어야 합니다.
유형 배열 I/O를 사용하면 강렬한 이미지 조작, 사운드 처리, 과도한 WebGL 계산을 훨씬 더 쉽게 실행할 수 있습니다. 예를 들어 파일을 배열 버퍼로 읽거나 XHR2를 사용하여 Blob을 가져와 결과를 작업자에게 직접 전달할 수 있습니다. 더 이상 데이터를 base64로 인코딩하지 않아도 됩니다.
제 생각에는 이 부분은 작업자가 처음부터 포함해야 하는 사소한 부분 중 하나입니다. 그냥 말이 되고,