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

إريك بيدلمان

اعتبارًا من 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 إلى سياق العامل، والعكس صحيح. وهذا يفتح إمكانات حقيقية للعاملين الذين لم نراها من قبل. وهذا يعني القدرة على تمرير البيانات الثنائية بسهولة بين التطبيق الرئيسي وسلسلة الوحدات العاملة (العامل).

تجعل وحدات الإدخال والإخراج الصفيفة المكتوبة بوحدات الإدخال والإخراج معالجة مكثفة للصور ومعالجة الصوت وعمليات حسابية متوافقة مع WebGL أكثر إمكانية. على سبيل المثال، يمكن للمرء قراءة "ملف" كمخزن مؤقت لصفيف أو جلب تخزين بيانات ثنائية (Blob) باستخدام XHR2 وتمرير النتيجة مباشرةً إلى العامل. عدم استخدام تشفير base64 للبيانات بعد الآن :)

في رأيي، أن هذا هو أحد العمّال الذين كانوا يفكّرون في الانضمام إلى البرنامج من البداية. الأمر منطقي.