کارگران ♥ ArrayBuffer

از crbug.com/73313 ، Chrome 13 و FF5 از ارسال یک ArrayBuffer (یا تایپ آرایه) به/از Web Worker پشتیبانی می‌کنند. به عنوان مثال:

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 نیست :)

به نظر من این یکی از آن مواردی است که کارگران باید از همان ابتدا شامل می شدند. این فقط منطقی است.