مصفوفة العاملين في التخزين المؤقت ♥

اعتبارًا من crbug.com/73313، يتيح الإصدار 13 من Chrome والإصدار 5 من Firefox إرسال ArrayBuffer (أو مصفوفة من النوع المحدّد) إلى Web Worker أو من 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 إلى سياق العامل والعكس صحيح. ويفتح ذلك آفاقًا حقيقية للعمال لم نشهدها من قبل. وهذا يعني إمكانية تمرير البيانات الثنائية بسهولة بين التطبيق الرئيسي وسلسلة المهام.

تجعل عمليات الإدخال/الإخراج في الصفيفات من النوع المحدّد من السهل جدًا إجراء عمليات معالجة مكثفة للصور والصوت وعمليات حسابية مكثفة في WebGL. على سبيل المثال، يمكن قراءة ملف كعارِض مصفوفة أو جلب ملف Blob باستخدام XHR2 ونقل النتيجة مباشرةً إلى عامل. لن يكون هناك مزيد من ترميز base64 للبيانات :)

في رأيي، هذا من التفاصيل الدقيقة التي كان على العمال تضمينها منذ البداية. هذا منطقي.