• इस पेज पर, यह जानकारी उपलब्ध है
  • worker.js
  • main.html

वर्कर ♥ arrayBuffer

  • इस पेज पर, यह जानकारी उपलब्ध है
  • worker.js
  • main.html

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 को वर्कर्स के कॉन्टेक्स्ट में कॉपी करने के लिए, स्ट्रक्चर्ड क्लोन एल्गोरिदम का इस्तेमाल करता है. इसके अलावा, वर्कर्स के कॉन्टेक्स्ट में मौजूद डेटा को postMessage() में कॉपी करने के लिए भी यही एल्गोरिदम इस्तेमाल किया जाता है. इससे, काम करने वालों के लिए ऐसी संभावनाएं खुलती हैं जो पहले कभी नहीं देखी गईं. इसका मतलब है कि मुख्य ऐप्लिकेशन और वर्क थ्रेड के बीच आसानी से बाइनरी डेटा पास किया जा सकता है.

टाइप की गई ऐरे I/O की मदद से, इमेज में ज़्यादा बदलाव करने, साउंड प्रोसेस करने, और WebGL की ज़्यादा गिनती करने की प्रोसेस को आसानी से पूरा किया जा सकता है. उदाहरण के लिए, किसी फ़ाइल को ऐरे बफ़र के तौर पर पढ़ा जा सकता है या XHR2 का इस्तेमाल करके ब्लॉब फ़ेच किया जा सकता है. साथ ही, नतीजे को सीधे किसी वर्कर्स को पास किया जा सकता है. अब डेटा को base64 कोड में बदलने की ज़रूरत नहीं है :)

मेरे हिसाब से, यह उन छोटी-मोटी बातों में से एक है जिन्हें कर्मचारियों को शुरू से ही शामिल करना चाहिए था. यह सही है.