ट्रांसफ़रेबल ऑब्जेक्ट
कॉपी किए बिना डेटा को कुशलतापूर्वक स्थानांतरित कीजिए।
ट्रांसफ़रेबल ऑब्जेक्ट, CoddyKit पर JavaScript Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह JavaScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रतिलिपि बनाने की लागत
संरचित प्रतिलिपि डेटा की एक-एक बाइट करके प्रतिलिपि बनाती है। बड़े buffer (चित्र, ऑडियो, बड़ी सरणियाँ) के लिए यह प्रक्रिया धीमी होती है और मेमोरी का उपयोग दोगुना कर देती है। स्थानांतरणीय वस्तुएँ प्रतिलिपि बनाने के बजाय स्वामित्व स्थानांतरित करके इस समस्या को हल करती हैं।
क्या स्थानांतरित किया जा सकता है
केवल कुछ वस्तु-प्रकारों को स्थानांतरित किया जा सकता है, जिनमें सबसे महत्वपूर्ण ArrayBuffer है। अन्य में MessagePort, ImageBitmap और OffscreenCanvas शामिल हैं।
ArrayBuffer— कच्ची बाइनरी मेमोरीMessagePort— किसी चैनल का अंतिम सिराImageBitmap— डिकोड किया हुआ चित्र डेटा
स्थानांतरण सूची
postMessage दूसरा तर्क स्वीकार करता है: स्थानांतरणीय वस्तुओं की एक सूची। उस सूची की वस्तुओं को कॉपी नहीं किया जाता, बल्कि स्थानांतरित किया जाता है।
const buffer = new ArrayBuffer(1024 * 1024); // 1 MB
worker.postMessage(buffer, [buffer]); // transfer itस्वामित्व स्थानांतरित होता है
स्थानांतरण के बाद भेजने वाला पक्ष buffer का उपयोग नहीं कर सकता; वह अलग हो जाता है (byteLength 0)। प्राप्त करने वाले पक्ष के पास अब वही अंतर्निहित मेमोरी होती है; कोई प्रतिलिपि नहीं बनाई जाती।
const buffer = new ArrayBuffer(8);
worker.postMessage(buffer, [buffer]);
console.log(buffer.byteLength); // 0 - now detachedटाइपयुक्त सरणियों का स्थानांतरण
टाइपयुक्त सरणी के अंतर्निहित ArrayBuffer को उसके .buffer गुणधर्म के माध्यम से स्थानांतरित करें। view स्वयं स्थानांतरणीय नहीं है, लेकिन उसका buffer स्थानांतरित किया जा सकता है।
const data = new Float64Array(100000);
worker.postMessage(data, [data.buffer]);
// data is now detached on this side.स्थानांतरण प्राप्त करना
प्राप्त करने वाला पक्ष स्थानांतरित वस्तु को event.data से ठीक उसी तरह पढ़ता है जैसे प्रतिलिपि बनाए गए संदेश को। अंतर केवल इतना है कि कोई प्रतिलिपि नहीं बनाई गई।
// worker.js
self.onmessage = (e) => {
const buffer = e.data; // we now own this memory
const view = new Uint8Array(buffer);
view[0] = 255;
};परिणाम वापस भेजना
प्रसंस्करण के बाद worker buffer को फिर से बिना प्रतिलिपि के वापस स्थानांतरित कर सकता है और स्वामित्व मुख्य थ्रेड को लौटा सकता है।
// worker.js
self.onmessage = (e) => {
const buffer = e.data;
// ...process the bytes...
self.postMessage(buffer, [buffer]); // transfer back
};स्थानांतरण बनाम प्रतिलिपि का प्रदर्शन
कुछ किलोबाइट के लिए अंतर नगण्य होता है। कई मेगाबाइट के बाइनरी डेटा के लिए स्थानांतरण बहुत तेज़ होता है और मेमोरी में अचानक बढ़ोतरी से बचाता है। बड़े buffer के लिए इसे अपनाएँ।
स्थानांतरण के बाद उपयोग की त्रुटियों से बचना
एक सामान्य गलती है buffer को स्थानांतरित करने के बाद उसे पढ़ना। transfer list में दिखाई देते ही buffer को समाप्त मानें।
worker.postMessage(buffer, [buffer]);
// BUG: buffer is detached here; this reads zero length.
// const len = buffer.byteLength; // 0प्रतिलिपि और स्थानांतरित डेटा को मिलाना
आप ऐसी वस्तु भेज सकते हैं जिसमें buffer हो और केवल उसी buffer को स्थानांतरित कर सकते हैं। वस्तु की प्रतिलिपि बनाई जाती है; सूचीबद्ध buffer स्थानांतरित होता है।
const msg = { type: 'frame', pixels: buffer };
worker.postMessage(msg, [buffer]);
// msg.type is cloned; buffer is transferred.स्थानांतरण का उपयोग कब करें
चित्र, ऑडियो और वीडियो के प्रसंस्करण, बड़ी संख्यात्मक गणनाओं और थ्रेडों के बीच बड़े बाइनरी डेटा-खंड ले जाने वाले किसी भी डेटा-प्रवाह के लिए स्थानांतरणीय वस्तुओं का उपयोग करें। छोटे JSON-जैसे डेटा के लिए साधारण प्रतिलिपि बनाना अधिक सरल और पर्याप्त है।
त्वरित जाँच
स्थानांतरणीय वस्तुओं की अपनी समझ का परीक्षण करें।
पुनरावलोकन
आपने स्थानांतरणीय वस्तुओं के बारे में सीखा:
postMessageके दूसरे तर्क के रूप में स्थानांतरण सूची दें।ArrayBufferऔर कुछ अन्य वस्तुएँ कॉपी होने के बजाय स्थानांतरित होती हैं।- इसके बाद भेजने वाले का buffer अलग हो जाता है।
- टाइपयुक्त सरणी को उसके
.bufferके माध्यम से स्थानांतरित करें। - बड़े बाइनरी डेटा के लिए स्थानांतरण और छोटे डेटा के लिए प्रतिलिपि का उपयोग करें।
अगला विषय, worker के उपयोग और सीमाएँ।
एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 59
- पाठ
- 200
अक्सर पूछे जाने वाले प्रश्न
क्या “ट्रांसफ़रेबल ऑब्जेक्ट” पाठ निःशुल्क है?
हाँ — JavaScript Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “ट्रांसफ़रेबल ऑब्जेक्ट” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“ट्रांसफ़रेबल ऑब्जेक्ट” में मैं क्या सीखूँगा?
कॉपी किए बिना डेटा को कुशलतापूर्वक स्थानांतरित कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ JavaScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या JavaScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर JavaScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“ट्रांसफ़रेबल ऑब्जेक्ट” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस JavaScript Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर JavaScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Web Worker बनाना
- postMessage से संदेश भेजना
- ट्रांसफ़रेबल ऑब्जेक्ट
- उपयोग और सीमाएँ