वर्कर ♥ 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 का इस्तेमाल करके Blob फ़ेच कर सकता है और नतीजे को सीधे किसी वर्कर को भेज सकता है. अब डेटा को base64 कोड में बदलने का कोई तरीका नहीं है :)

मेरी राय में यह उन नाइटपिक वर्कर में से एक है जिन्हें शुरू से शामिल करना चाहिए था. यह वाकई समझ में आता है.