Worker ! ArrayBuffer

Eric Bidelman

Kể từ crbug.com/73313, Chrome 13 và FF5 hỗ trợ gửi ArrayBuffer (hoặc Typed Array) đến/từ Web Worker. Ví dụ:

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

Tại sao điều này lại thú vị?...dữ liệu nhị phân!

Thay vì chuyển đổi tuần tự dữ liệu postMessage() của bạn sang đối tượng JSON, trình duyệt sử dụng thuật toán sao chép có cấu trúc để sao chép ArrayBuffer vào ngữ cảnh của trình thực thi và ngược lại. Điều này mở ra tiềm năng thực sự cho nhân viên mà chúng ta chưa từng thấy trước đây. Tức là có thể dễ dàng truyền dữ liệu nhị phân giữa luồng ứng dụng chính và luồng worker.

I/O mảng được nhập giúp cho việc xử lý hình ảnh, xử lý âm thanh và các tính toán WebGL nặng nề trở nên khả thi hơn nhiều. Ví dụ: bạn có thể đọc tệp dưới dạng vùng đệm mảng hoặc tìm nạp Blob bằng cách sử dụng XHR2 và chuyển kết quả trực tiếp cho một trình thực thi. Không còn mã hoá dữ liệu base64 nữa :)

Theo tôi, đây là một trong những nhân viên nên được đưa vào ngay từ đầu. Thật hợp lý.