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 कोड में बदलने की ज़रूरत नहीं है :)
मेरे हिसाब से, यह उन छोटी-मोटी बातों में से एक है जिन्हें कर्मचारियों को शुरू से ही शामिल करना चाहिए था. यह सही है.