आप बिल्ट-इन setTimeout() मेथड का उपयोग करके किसी भी JavaScript फंक्शन के एक्सीक्यूशन में देरी कर सकते हैं।
मान लीजिए आप 3 सेकंड के बाद एक अलर्ट डायलॉग दिखाना चाहते हैं।
सबसे पहले आपको 3 सेकंड को मिलीसेकंड (ms) में बदलना होगा, जो 3000ms है, और फिर फंक्शन सेट करें:
setTimeout(function() {
alert("That's 3 seconds!")
}, 3000)
उपरोक्त एक अनाम (नामहीन) फंक्शन है, जो वास्तविक जीवन में ज्यादा व्यावहारिक नहीं है, क्योंकि इसका उपयोग केवल एक बार किया जा सकता है, और यह नॉन-डिस्क्रिप्टिव है।
यहां वही कार्यक्षमता है, लेकिन एक नामित, फंक्शन एक्सप्रेशन में:
const delayThreeSeconds = function() {
alert("That's 3 seconds!")
}
setTimeout(delayThreeSeconds, 3000)
अब आप अपने प्रोजेक्ट में कहीं भी delayThreeSeconds वेरिएबल को रेफरेंस करके अपने डिले फंक्शन का पुन: उपयोग कर सकते हैं।
setTimeout डिले सजेस्टिव है — सटीक नहीं
ज्यादातर लोग नहीं जानते कि setTimeout में आपके द्वारा निर्दिष्ट समय न्यूनतम फंक्शन-एक्सीक्यूशन डिले है — सटीक राशि नहीं कि इसे एक्सीक्यूट होने में कितना समय लगेगा।
इसलिए यदि आप 3000ms (3 सेकंड) निर्दिष्ट करते हैं, तो आपके फंक्शन के एक्सीक्यूट होने से पहले बहुत अधिक समय लग सकता है क्योंकि JavaScript सिंक्रोनस है, यह एक समय में एक टास्क चलाता है।
इसलिए यदि आपकी वेबसाइट में कई अन्य JavaScript फंक्शन टास्क हैं जो आपके setTimeout फंक्शन से पहले एक्सीक्यूट होने के लिए सेट हैं, तो उन टास्क्स को पहले पूरा करना होगा, और इसमें कुछ मिलीसेकंड से लेकर कई सेकंड तक का समय लग सकता है।
कुछ ऐसा जो भारी देरी का कारण बन सकता है, वह है यदि आपका कोई फंक्शन पूरा होने के लिए किसी बाहरी स्रोत से एक बड़ी स्क्रिप्ट लोड करने पर निर्भर करता है। ये वे जाल हैं जिनमें आप एक शुरुआती, या यहां तक कि एक अनुभवी डेवलपर के रूप में पड़ सकते हैं।
यह सब setTimeout को कुछ हद तक अप्रत्याशित बनाता है, या कम से कम अविश्वसनीय यदि आपको पिन-पॉइंट सटीकता की आवश्यकता है।
इस समस्या से बचने का एक सरल तरीका (ज्यादातर)
यदि आपके प्रोजेक्ट में कोई विशिष्ट फंक्शन है जहां सटीक टाइमिंग महत्वपूर्ण है, तो इसे किसी भी अन्य फंक्शन से पहले चलाने के लिए सेट करें। यह कम से कम यह सुनिश्चित करेगा कि आपका सबसे महत्वपूर्ण फंक्शन जितनी जल्दी हो सके चलता है।
हालांकि, यहां तक कि अगर आपका सबसे महत्वपूर्ण फंक्शन किसी भी अन्य कोड से पहले एक्सीक्यूट होने के लिए सेट है, तब भी कुछ एक्सीक्यूशन डिले हो सकती है।
उदाहरण के लिए, यदि यूजर के ब्राउज़र में बहुत सारे एडऑन्स/एक्सटेंशन इंस्टॉल हैं। वह सॉफ्टवेयर JavaScript (अन्य चीजों के अलावा) पर चलता है और यह अनुमान लगाना असंभव है कि यह आपकी वेबसाइट के कोड एक्सीक्यूशन पर कितना या यदि देरी का कारण बनेगा।
यह सब कारण है कि परफॉरमेंस इतना महत्वपूर्ण विषय है जिस पर ध्यान केंद्रित करना चाहिए, और क्यों सभी ब्राउज़र्स और कई डिवाइसेज पर अपने कोड की परफॉरमेंस का परीक्षण करना लगातार यूजर एक्सपीरियंस प्रदान करने के लिए महत्वपूर्ण है।
जानना अच्छा है: जो आपने आज सीखा वह setInterval मेथड पर भी लागू होता है, अंतर यह है कि यह बार-बार चलता है, — setTimeout एक बार चलता है।