यह समझना कि जावास्क्रिप्ट कोड को कैसे निष्पादित करता है: सिंक्रोनस और एसिंक्रोनस पैटर्न
जावास्क्रिप्ट एक एकल-थ्रेडेड भाषा है, जिसका अर्थ है कि यह एक समय में कोड की एक पंक्ति निष्पादित करती है। यह समझना कि यह सिंक्रोनस और एसिंक्रोनस दोनों कार्यों को कैसे संभालता है, डेवलपर्स के लिए महत्वपूर्ण है। अक्सर, इस विषय से संबंधित प्रश्न तकनीकी साक्षात्कारों में आते हैं, जिससे इन अवधारणाओं को पूरी तरह से समझना महत्वपूर्ण हो जाता है।
जब डेवलपर्स जैसे फ़ंक्शंस का उपयोग करते हैं सेटटाइमआउट या वादे, निष्पादन प्रवाह पहली बार में थोड़ा अप्रत्याशित लग सकता है। हालाँकि, एक स्पष्ट संरचना का पालन करके, आप सटीक क्रम निर्धारित कर सकते हैं जिसमें आपके कोड के विभिन्न भाग निष्पादित होंगे। व्यवहार करते समय यह विशेष रूप से महत्वपूर्ण है कॉलबैक और घटना कतारें.
इस उदाहरण में, हम बताएंगे कि जावास्क्रिप्ट सिंक्रोनस कार्यों को कैसे संभालता है कंसोल.लॉग और अतुल्यकालिक संचालन जैसे सेटटाइमआउट और वादे. इस स्पष्टीकरण के अंत तक, आपको इस बात की स्पष्ट समझ हो जाएगी कि जावास्क्रिप्ट का ईवेंट लूप कार्यों को कैसे प्राथमिकता देता है और संसाधित करता है।
यह आलेख आपको जावास्क्रिप्ट में निष्पादन के क्रम को निर्धारित करने में मदद करने के लिए डिज़ाइन किया गया है, जो साक्षात्कार प्रश्नों से निपटने या एसिंक्रोनस कोड को डीबग करने के लिए एक उपयोगी कौशल है। आइए अवधारणाओं को स्पष्ट रूप से प्रदर्शित करने के लिए एक व्यावहारिक उदाहरण पर गौर करें।
आज्ञा | उपयोग का उदाहरण |
---|---|
setTimeout() | यह फ़ंक्शन एक निर्दिष्ट विलंब के बाद कोड निष्पादन को शेड्यूल करता है। इसका उपयोग अतुल्यकालिक कार्यों को अनुकरण करने के लिए किया जाता है, जैसे क्रियाओं में देरी करना या इवेंट लूप में संचालन को स्थगित करना। उदाहरण में, इसका उपयोग लॉगिंग "बी" और "ई" के निष्पादन में देरी करने के लिए किया जाता है। |
Promise.resolve() | एक वादा बनाता है जिसका तुरंत समाधान किया जाता है। यह तब उपयोगी होता है जब आपको एसिंक्रोनस कोड निष्पादित करने की आवश्यकता होती है लेकिन किसी बाहरी स्थिति की प्रतीक्षा करने की आवश्यकता नहीं होती है। उदाहरण में, इसका उपयोग "बी" के बाद एसिंक्रोनस रूप से "डी" लॉग करने के लिए किया जाता है। |
then() | यह विधि एक वादे के साथ एक कॉलबैक जोड़ती है जिसे वादा पूरा होने पर निष्पादित किया जाएगा। यह सुनिश्चित करता है कि अतुल्यकालिक कार्य पूरा होने के बाद कुछ कोड चलेगा। यहां, यह सुनिश्चित करता है कि हल किए गए वादे के बाद "डी" लॉग किया गया है। |
Event Loop | इवेंट लूप एक तंत्र है जो जावास्क्रिप्ट में अतुल्यकालिक कार्यों के निष्पादन को संभालता है। हालांकि यह सीधे तौर पर एक कमांड नहीं है, लेकिन कोड में संचालन के क्रम को समझाने के लिए इसके कार्य को समझना महत्वपूर्ण है। वर्तमान स्टैक साफ़ होने के बाद यह कॉलबैक कतार से कार्यों को संसाधित करता है। |
Microtask Queue | यह हल किए गए वादों जैसे कार्यों के लिए प्राथमिकता कतार है। माइक्रोटास्क (जैसे हल किए गए वादे) इवेंट लूप की कार्य कतार (जैसे सेटटाइमआउट कॉलबैक) से कार्यों से पहले निष्पादित किए जाते हैं। यही कारण है कि "D" "E" से पहले लॉग करता है। |
Console.log() | डिबगिंग उद्देश्यों के लिए कंसोल पर संदेशों को प्रिंट करने के लिए उपयोग किया जाता है। इस संदर्भ में, यह उस क्रम को ट्रैक करने में सहायक है जिसमें सिंक्रोनस और एसिंक्रोनस कोड निष्पादित होता है। |
Callback Queue | कॉलबैक कतार उन कार्यों को संग्रहीत करती है जो वर्तमान कोड निष्पादन समाप्त होने के बाद निष्पादित होने के लिए तैयार हैं, जैसे कि सेटटाइमआउट को पास किए गए फ़ंक्शन। इवेंट लूप इन कार्यों को कॉल स्टैक पर ले जाता है। |
Zero Delay | जब सेटटाइमआउट() विलंब को 0 पर सेट किया जाता है, तो सभी सिंक्रोनस कार्यों और माइक्रोटास्क पूरा होने के बाद कॉलबैक निष्पादित किया जाता है। उदाहरण में, "ई" वाला कॉलबैक "डी" के बाद चलता है, भले ही इसकी देरी 0 हो। |
Asynchronous Execution | यह एक प्रोग्रामिंग प्रतिमान है जहां कुछ ऑपरेशन मुख्य कोड प्रवाह से अलग से चलते हैं, जिससे जावास्क्रिप्ट मुख्य थ्रेड को अवरुद्ध किए बिना नेटवर्क अनुरोध या टाइमर जैसे कार्यों को संभालने की अनुमति देता है। |
जावास्क्रिप्ट निष्पादन प्रवाह की खोज: सिंक्रोनस बनाम एसिंक्रोनस कोड
जावास्क्रिप्ट में, सिंक्रोनस और एसिंक्रोनस कोड के निष्पादन क्रम को समझना आवश्यक है, खासकर काम करते समय सेटटाइमआउट और वादे. समझने की मुख्य अवधारणा यह है कि इवेंट लूप पहले सिंक्रोनस कार्यों को कैसे संसाधित करता है और फिर कतारबद्ध एसिंक्रोनस कार्यों को संभालने के लिए आगे बढ़ता है। प्रदान किए गए उदाहरण कोड में, पहले दो लॉग ("ए" और "एफ") समकालिक हैं, जिसका अर्थ है कि वे कोड में दिखाई देने वाले सटीक क्रम में निष्पादित होते हैं। जिस क्षण उन्हें निष्पादित किया जाता है, स्क्रिप्ट तुरंत बाद के प्रसंस्करण के लिए सेटटाइमआउट जैसे अतुल्यकालिक कार्यों को शेड्यूल करती है।
सेटटाइमआउट फ़ंक्शन संचालन को स्थगित करने का एक सामान्य तरीका है, जिससे निष्पादन प्रवाह में देरी की भावना पैदा होती है। इस मामले में, दोनों सेटटाइमआउट इवेंट कतार में कंसोल लॉग "बी" और "ई" जोड़ने के लिए फ़ंक्शंस का उपयोग किया जाता है। यह ध्यान रखना महत्वपूर्ण है कि यद्यपि "ई" में 0 मिलीसेकंड की देरी है, फिर भी यह वर्तमान सिंक्रोनस संचालन और माइक्रोटास्क पूरा होने के बाद भी कतारबद्ध हो जाता है। अधिक जटिल जावास्क्रिप्ट कार्यों के निष्पादन क्रम को निर्धारित करने में इस सूक्ष्म अंतर को समझना महत्वपूर्ण है।
पहले के अंदर सेटटाइमआउट कॉलबैक, लॉग "बी" पहले मुद्रित होता है क्योंकि यह अभी भी सिंक्रोनस कार्य कतार का हिस्सा है, जो प्राथमिकता लेता है। फिर, उस कॉलबैक के भीतर, एक हल किया गया वादा बनाया जाता है वादा.संकल्प. यह एक माइक्रोटास्क को ट्रिगर करता है जो सुनिश्चित करता है कि लॉग "डी" "बी" के बाद लेकिन मुख्य इवेंट कतार में किसी भी अन्य कार्य से पहले होता है। माइक्रोटास्क कतार में रखे गए वादों का यह व्यवहार दूसरे सेटटाइमआउट कॉलबैक लॉग "ई" से पहले "डी" को लॉग करने की अनुमति देता है। इस प्रकार, माइक्रोटास्क मानक अतुल्यकालिक कार्यों पर प्राथमिकता लेते हैं।
अंतिम निष्पादन आदेश को संक्षेप में प्रस्तुत करने के लिए: "ए" और "एफ" को समकालिक रूप से लॉग किया जाता है, उसके बाद "बी" को लॉग किया जाता है, जिसे पहले सेटटाइमआउट द्वारा कतारबद्ध किया जाता है। हल किए गए वादे के कारण "डी" को माइक्रोटास्क के रूप में लॉग किया जाता है। अंत में, "ई" को अंतिम रूप से लॉग किया गया है क्योंकि यह दूसरे का हिस्सा है सेटटाइमआउट वापस बुलाओ। साक्षात्कार के प्रश्नों का उत्तर देते समय या वास्तविक जीवन की परियोजनाओं में एसिंक्रोनस कोड को डीबग करते समय सिंक्रोनस कार्यों, इवेंट लूप और माइक्रोटास्क के संयोजन से जावास्क्रिप्ट के निष्पादन प्रवाह की यह समझ अमूल्य है।
विभिन्न परिदृश्यों में जावास्क्रिप्ट के सिंक्रोनस और एसिंक्रोनस निष्पादन को समझना
यह स्क्रिप्ट सिंक्रोनस और एसिंक्रोनस ऑपरेशंस के मिश्रण का उपयोग करके जावास्क्रिप्ट के इवेंट लूप तंत्र को प्रदर्शित करती है।
console.log("A");
setTimeout(() => {
console.log("B");
Promise.resolve("C").then(() => console.log("D"));
}, 1000);
setTimeout(() => console.log("E"), 0);
console.log("F");
जावास्क्रिप्ट निष्पादन का विश्लेषण: इवेंट लूप पर एक फोकस
यह उदाहरण पिछले उदाहरण पर आधारित है, जिसमें दिखाया गया है कि इवेंट लूप विभिन्न समय परिदृश्यों में कतारबद्ध कार्यों को कैसे संसाधित करता है।
console.log("Start");
setTimeout(() => {
console.log("Middle");
}, 500);
Promise.resolve().then(() => {
console.log("Promise 1");
});
console.log("End");
जावास्क्रिप्ट के इवेंट लूप और कार्य प्राथमिकताकरण में गहराई से उतरें
जावास्क्रिप्ट के अतुल्यकालिक व्यवहार का एक प्रमुख पहलू है इवेंट लूप, जो कॉलबैक, वादों और अन्य अतुल्यकालिक कोड के निष्पादन को संभालने के लिए जिम्मेदार है। यह ईवेंट लूप लगातार जाँचता है कि कॉल स्टैक खाली है या नहीं, और यदि है, तो यह कॉलबैक कतार और माइक्रोटास्क कतार से कार्यों को संसाधित करता है। यह समझना कि इन कतारों के भीतर कार्यों को कैसे प्राथमिकता दी जाती है, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि कोड अपेक्षित व्यवहार करे, खासकर संभालते समय सेटटाइमआउट और एक साथ वादे भी.
माइक्रोटास्क कतार को कॉलबैक कतार पर प्राथमिकता दी जाती है। जैसे कार्य संकल्पों का वादा करें माइक्रोटास्क कतार में रखे गए हैं, जिसका अर्थ है कि उन्हें कॉलबैक कतार से किसी भी विलंबित कार्य से पहले निष्पादित किया जाता है, भले ही सेटटाइमआउट में शून्य की देरी हो। यही कारण है कि कोड उदाहरण में, वादे से लॉग "डी" दूसरे सेटटाइमआउट से लॉग "ई" से पहले निष्पादित किया जाता है। अप्रत्याशित व्यवहार से बचने के लिए अतुल्यकालिक संचालन को मिश्रित करने वाला कोड लिखते समय डेवलपर्स के लिए इसे समझना महत्वपूर्ण है।
वास्तविक दुनिया के अनुप्रयोगों में, एपीआई कॉल या टाइमर जैसे अतुल्यकालिक संचालन अक्सर सिंक्रोनस कोड के साथ इंटरैक्ट करते हैं। यह जानकर कि इवेंट लूप, कॉलबैक कतार और माइक्रोटास्क कतार कैसे काम करती है, डेवलपर्स अपने कोड के परिणाम का बेहतर अनुमान लगा सकते हैं। प्रदर्शन को अनुकूलित करते समय या जटिल स्क्रिप्ट को डीबग करते समय यह विशेष रूप से महत्वपूर्ण है अतुल्यकालिक संचालन और सिंक्रोनस कोड अक्सर इंटरैक्ट करते हैं।
जावास्क्रिप्ट निष्पादन आदेश पर अक्सर पूछे जाने वाले प्रश्न
- जावास्क्रिप्ट में इवेंट लूप क्या है?
- इवेंट लूप वह तंत्र है जिसका उपयोग जावास्क्रिप्ट एसिंक्रोनस ऑपरेशंस के निष्पादन को प्रबंधित करने और प्राथमिकता देने के लिए करता है, जैसे कि ट्रिगर किए गए setTimeout या Promises.
- कैसे हुआ setTimeout काम?
- setTimeout एक निर्दिष्ट विलंब के बाद निष्पादित होने के लिए कॉलबैक शेड्यूल करता है, लेकिन इसे कॉलबैक कतार में रखा जाता है और सभी सिंक्रोनस कोड और माइक्रोटास्क संसाधित होने के बाद ही निष्पादित किया जाता है।
- ए क्यों करता है Promise ए से पहले समाधान करें setTimeout 0 की देरी से?
- वादों को माइक्रोटास्क कतार में रखा जाता है, जहां कॉलबैक कतार की तुलना में उच्च प्राथमिकता होती है setTimeout कॉलबैक रखे गए हैं.
- कॉलबैक कतार और माइक्रोटास्क कतार के बीच क्या अंतर है?
- कॉलबैक कतार का उपयोग किसके लिए किया जाता है? setTimeout और अन्य अतुल्यकालिक संचालन, जबकि माइक्रोटास्क कतार जैसे कार्यों को संभालती है Promise कॉलबैक से पहले संकल्प और उन्हें संसाधित करता है।
- निष्पादन का आदेश किसके लिए है? console.log दिए गए उदाहरण में कथन?
- ऑर्डर "ए", "एफ", "बी", "डी", "ई" है, जिस तरह से सिंक्रोनस और एसिंक्रोनस कार्यों को इवेंट लूप द्वारा नियंत्रित किया जाता है।
जावास्क्रिप्ट के निष्पादन मॉडल को समाप्त करना
कैसे में महारत हासिल करने के लिए जावास्क्रिप्ट के इवेंट लूप को समझना महत्वपूर्ण है अतुल्यकालिक संचालन जैसे सेटटाइमआउट और वादे निष्पादित किये जाते हैं. यह डेवलपर्स को यह सुनिश्चित करने में मदद करता है कि उनका कोड अपेक्षा के अनुरूप व्यवहार करे और कई कार्यों को संभालते समय सामान्य नुकसान से बचें।
इस उदाहरण में, "ए", "एफ", "बी", "डी", और "ई" का अंतिम निष्पादन क्रम दर्शाता है कि कैसे माइक्रोटास्क (वादे) सेटटाइमआउट से कॉलबैक पर प्राथमिकता लेते हैं। यह ज्ञान साक्षात्कार प्रश्नों और वास्तविक जीवन की कोडिंग चुनौतियों के लिए अमूल्य है।
जावास्क्रिप्ट निष्पादन आदेश के लिए संदर्भ और स्रोत
- जावास्क्रिप्ट में इवेंट लूप और कार्य प्राथमिकताकरण अवधारणाओं पर विस्तार से बताया गया है। एमडीएन वेब डॉक्स - इवेंट लूप
- के आचरण पर चर्चा करता है वादे और सेटटाइमआउट अतुल्यकालिक जावास्क्रिप्ट कोड निष्पादन में। जावास्क्रिप्ट जानकारी - माइक्रोटास्क कतार
- जावास्क्रिप्ट उदाहरणों का उपयोग करके सिंक्रोनस और एसिंक्रोनस कार्यों के निष्पादन के क्रम को समझाता है। फ्रीकोडकैंप - जावास्क्रिप्ट वादों को समझना