Kể từ crbug.com/73313, Chrome 13 và FF5 hỗ trợ gửi ArrayBuffer
(hoặc Mảng đã nhập) đến/từ một Worker trên web. 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);
Điều này thú vị ở chỗ nào?...dữ liệu nhị phân!
Thay vì chuyển đổi tuần tự dữ liệu postMessage()
thành đối tượng JSON, trình duyệt sẽ 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 worker và ngược lại. Điều này mở ra tiềm năng thực sự cho người lao động 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 ứng dụng chính và luồng worker.
I/O mảng đã nhập giúp thao tác xử lý hình ảnh, xử lý âm thanh và tính toán WebGL nặng 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 XHR2 và chuyển kết quả trực tiếp đến một worker. Không cần mã hoá base64 dữ liệu nữa :)
Theo tôi, đây là một trong những worker nitpick nên đưa vào ngay từ đầu. Điều này rất hợp lý.