जावास्क्रिप्ट, एकल-थ्रेडेड भाषा होने के कारण, एक समय में एक कार्य निष्पादित करती है। हालाँकि, यह इवेंट लूप की बदौलत एसिंक्रोनस ऑपरेशंस को आसानी से संभालता है। इवेंट लूप एक मौलिक अवधारणा है जो जावास्क्रिप्ट के समवर्ती मॉडल को शक्ति प्रदान करती है, जिससे यह मुख्य थ्रेड को अवरुद्ध किए बिना कई कार्यों को कुशलतापूर्वक प्रबंधित करने की अनुमति देता है। इस लेख में, हम जावास्क्रिप्ट इवेंट लूप की जटिलताओं का पता लगाएंगे, समझेंगे कि यह कैसे काम करता है और उत्तरदायी वेब एप्लिकेशन विकसित करने के लिए यह महत्वपूर्ण क्यों है।
इवेंट लूप एक तंत्र है जिसका उपयोग जावास्क्रिप्ट अतुल्यकालिक संचालन को संभालने के लिए करता है। यह लगातार कॉल स्टैक और कार्य कतार की जांच करता है, यह सुनिश्चित करता है कि कार्य सही क्रम में निष्पादित किए गए हैं। इवेंट लूप का प्राथमिक लक्ष्य सिंक्रोनस और एसिंक्रोनस कोड के निष्पादन को प्रबंधित करके एप्लिकेशन को उत्तरदायी बनाए रखना है।
1. कॉल स्टैक:
कॉल स्टैक एक डेटा संरचना है जो लास्ट इन, फर्स्ट आउट (LIFO) क्रम में फ़ंक्शन कॉल को ट्रैक करती है। जब कोई फ़ंक्शन कॉल किया जाता है, तो उसे स्टैक में जोड़ दिया जाता है। जब फ़ंक्शन निष्पादन पूरा हो जाता है, तो इसे स्टैक से हटा दिया जाता है।
2. वेब एपीआई:
सेटटाइमआउट, HTTP अनुरोध (XMLHttpRequest, Fetch API), और DOM ईवेंट जैसे अतुल्यकालिक संचालन को संभालने के लिए वेब एपीआई ब्राउज़र (या Node.js वातावरण) द्वारा प्रदान किए जाते हैं। ये एपीआई जावास्क्रिप्ट इंजन के बाहर काम करते हैं।
3. कॉलबैक कतार (कार्य कतार):
कॉलबैक कतार एक डेटा संरचना है जो अतुल्यकालिक संचालन के कॉलबैक रखती है। कॉल स्टैक खाली होने पर ये कॉलबैक निष्पादित होते हैं।
4. इवेंट लूप:
इवेंट लूप लगातार कॉल स्टैक और कॉलबैक कतार की निगरानी करता है। यदि कॉल स्टैक खाली है, तो यह कतार से पहला कॉलबैक लेता है और इसे स्टैक पर धकेलता है, जिससे इसे निष्पादित किया जा सकता है।
इवेंट लूप को समझने के लिए, आइए एक उदाहरण देखें:
console.log('Start'); setTimeout(() => { console.log('Timeout'); }, 0); console.log('End');
1. आरंभीकरण:
कंसोल.लॉग ('स्टार्ट') फ़ंक्शन को कॉल स्टैक पर धकेल दिया जाता है और निष्पादित किया जाता है, कंसोल पर स्टार्ट प्रिंट किया जाता है। फिर फ़ंक्शन को स्टैक से हटा दिया जाता है।
2. अतुल्यकालिक ऑपरेशन:
सेटटाइमआउट फ़ंक्शन को कॉलबैक और 0 मिलीसेकंड की देरी के साथ कॉल किया जाता है। सेटटाइमआउट फ़ंक्शन को कॉल स्टैक पर धकेल दिया जाता है और फिर टाइमर सेट करने के तुरंत बाद हटा दिया जाता है। कॉलबैक वेब एपीआई को भेज दिया गया है।
3. निरंतरता:
कंसोल.लॉग ('एंड') फ़ंक्शन को कॉल स्टैक पर धकेल दिया जाता है और कंसोल पर एंड प्रिंट करके निष्पादित किया जाता है। फिर फ़ंक्शन को स्टैक से हटा दिया जाता है।
4. कॉलबैक निष्पादन:
कॉल स्टैक खाली होने के बाद, इवेंट लूप कॉलबैक कतार की जांच करता है। सेटटाइमआउट से कॉलबैक को कॉलबैक कतार में ले जाया जाता है और फिर कॉल स्टैक पर धकेल दिया जाता है, टाइमआउट को कंसोल पर प्रिंट किया जाता है।
जावास्क्रिप्ट में, कार्यों को दो प्रकारों में वर्गीकृत किया गया है: माइक्रोटास्क और मैक्रोटास्क। कुशल एसिंक्रोनस कोड लिखने के लिए उनके बीच अंतर को समझना महत्वपूर्ण है।
1. सूक्ष्म कार्य:
माइक्रोटास्क में वादे और म्यूटेशनऑब्जर्वर कॉलबैक शामिल हैं। उनकी प्राथमिकता अधिक होती है और उन्हें मैक्रोटास्क से पहले निष्पादित किया जाता है। प्रत्येक मैक्रोटास्क के बाद, इवेंट लूप माइक्रोटास्क कतार की जांच करता है और सभी उपलब्ध माइक्रोटास्क निष्पादित करता है।
2.मैक्रोटास्क:
मैक्रोटास्क में सेटटाइमआउट, सेटइंटरवल और I/O ऑपरेशन शामिल हैं। उन्हें कॉलबैक कतार में जोड़े जाने के क्रम में निष्पादित किया जाता है।
वादों के साथ निम्नलिखित उदाहरण पर विचार करें:
console.log('Start'); setTimeout(() => { console.log('Timeout'); }, 0); Promise.resolve().then(() => { console.log('Promise'); }); console.log('End');
1. आरंभीकरण:
console.log('Start') स्टार्ट प्रिंट करता है।
सेटटाइमआउट 0ms की देरी से एक मैक्रोटास्क शेड्यूल करता है।
Promise.resolve().then() एक माइक्रोटास्क शेड्यूल करता है।
कंसोल.लॉग('एंड') एंड प्रिंट करता है।
2. माइक्रोटास्क निष्पादन:
माइक्रोटास्क कतार की जाँच की जाती है, और प्रॉमिस कॉलबैक निष्पादित किया जाता है, प्रॉमिस प्रिंट किया जाता है।
3. मैक्रोटास्क निष्पादन:
मैक्रोटास्क कतार की जांच की जाती है, और सेटटाइमआउट कॉलबैक निष्पादित किया जाता है, टाइमआउट प्रिंट किया जाता है।
1. मुख्य थ्रेड को ब्लॉक करने से बचें:
मुख्य थ्रेड को प्रतिक्रियाशील बनाए रखने के लिए वेब कर्मियों में भारी गणना करें या अतुल्यकालिक पैटर्न का उपयोग करें।
2. वादे और Async/प्रतीक्षा का उपयोग करें:
प्रॉमिस और एसिंक/वेट एसिंक्रोनस ऑपरेशंस को संभालना आसान बनाते हैं और कोड पठनीयता में सुधार करते हैं।
3. कार्य प्राथमिकताओं को समझें:
अधिक पूर्वानुमानित और कुशल कोड लिखने के लिए माइक्रोटास्क और मैक्रोटास्क के बीच अंतर से अवगत रहें।
जावास्क्रिप्ट इवेंट लूप एक शक्तिशाली तंत्र है जो एकल-थ्रेडेड वातावरण में अतुल्यकालिक प्रोग्रामिंग को सक्षम बनाता है। यह समझकर कि इवेंट लूप कैसे काम करता है, आप अधिक कुशल और प्रतिक्रियाशील वेब एप्लिकेशन लिख सकते हैं। एक सहज और निर्बाध उपयोगकर्ता अनुभव सुनिश्चित करते हुए, एसिंक्रोनस कार्यों को प्रभावी ढंग से प्रबंधित करने के लिए वादों, एसिंक/प्रतीक्षा और वेब कार्यकर्ताओं का लाभ उठाना याद रखें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3