শ্রমিক ♥ ArrayBuffer

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 কপি করতে কাঠামোগত ক্লোন অ্যালগরিদম ব্যবহার করে এবং এর বিপরীতে। এটি কর্মীদের জন্য একটি বাস্তব সম্ভাবনা উন্মুক্ত করে যা আমরা আগে দেখিনি। অর্থাৎ, প্রধান অ্যাপ এবং কর্মী থ্রেডের মধ্যে সহজেই বাইনারি ডেটা পাস করতে সক্ষম হচ্ছে।

টাইপ করা অ্যারে I/O তীব্র ইমেজ ম্যানিপুলেশন, সাউন্ড প্রসেসিং এবং ভারী WebGL ক্যালকুলেশনকে অনেক বেশি সম্ভবপর করে তোলে। উদাহরণস্বরূপ, কেউ একটি অ্যারে বাফার হিসাবে একটি ফাইল পড়তে পারে বা XHR2 ব্যবহার করে একটি ব্লব আনতে পারে এবং ফলাফলটি সরাসরি একজন কর্মীর কাছে পাঠাতে পারে। আর কোন বেস64 ডেটা এনকোডিং নয় :)

আমার মতে এটি সেই নিটপিক্স কর্মীদের মধ্যে একটি যা শুরু থেকেই অন্তর্ভুক্ত করা উচিত ছিল। এটা শুধু জ্ঞান করে তোলে.