क्या कोई अंतर है?
हाँ। एक टाइमआउट सेटटाइमआउट () कहा जाता है के बाद समय की एक निश्चित राशि को निष्पादित करता है; एक अंतराल पिछले अंतराल के निकाल दिए जाने के बाद एक निश्चित समय पर अमल करता है।
यदि आपका doStuff () फ़ंक्शन निष्पादित होने में कुछ समय लेता है, तो आपको अंतर दिखाई देगा। उदाहरण के लिए, यदि हम setTimeout / setInterval के साथ कॉल का प्रतिनिधित्व करते हैं, तो .
टाइमआउट / अंतराल की एक फायरिंग *
और जावास्क्रिप्ट कोड निष्पादन के साथ [-----]
, समयसीमा जैसी दिखती है:
Timeout:
. * . * . * . * .
[--] [--] [--] [--]
Interval:
. * * * * * *
[--] [--] [--] [--] [--] [--]
अगली जटिलता यह है कि यदि जावास्क्रिप्ट अंतराल है, जबकि जावास्क्रिप्ट पहले से ही कुछ करने में व्यस्त है (जैसे कि पिछले अंतराल को संभालना)। इस मामले में, अंतराल को याद किया जाता है, और जैसे ही पिछले हैंडलर खत्म होता है और ब्राउज़र पर नियंत्रण वापस करता है। तो उदाहरण के लिए एक doStuff () प्रक्रिया के लिए जो कभी-कभी छोटी ([-]) और कभी-कभी लंबी होती है ([-----]):
. * * • * • * *
[-] [-----][-][-----][-][-] [-]
• एक अंतराल फायरिंग का प्रतिनिधित्व करता है जो अपने कोड को सीधे निष्पादित नहीं कर सकता था, और इसके बजाय लंबित बना दिया गया था।
तो अंतराल तय समय पर वापस पाने के लिए 'पकड़ने' की कोशिश करते हैं। लेकिन, वे एक दूसरे के शीर्ष पर कतार नहीं लगाते हैं: केवल एक ही अंतराल के प्रति लंबित निष्पादन हो सकता है। (यदि वे सभी कतारबद्ध हो जाते हैं, तो ब्राउज़र को उत्कृष्ट निष्पादन की एक विस्तृत सूची के साथ छोड़ दिया जाएगा!)
. * • • x • • x
[------][------][------][------]
x एक अंतराल फायरिंग का प्रतिनिधित्व करता है जो निष्पादित या लंबित नहीं किया जा सकता है, इसलिए इसके बजाय छोड़ दिया गया था।
यदि आपका doStuff () फ़ंक्शन आदतन उस अंतराल से निष्पादित होने में अधिक समय लेता है जो इसके लिए निर्धारित है, तो ब्राउज़र इसे सेवा करने की कोशिश में 100% सीपीयू खाएगा, और कम संवेदनशील हो सकता है।
आप किसका उपयोग करते हैं और क्यों?
जंजीर-टाइमआउट ब्राउज़र को खाली समय की गारंटी स्लॉट देता है; इंटरवल यह सुनिश्चित करने की कोशिश करता है कि यह ब्राउज़र यूआई उपलब्धता की कीमत पर, अपने निर्धारित समय के अनुसार जितना संभव हो उतना निष्पादित हो।
मैं एक बार के एनिमेशन के लिए एक अंतराल पर विचार करना चाहता था जो मैं जितना संभव हो उतना चिकनी होना चाहता था, जबकि जंजीर टाइमआउट चल रहे एनिमेशन के लिए अधिक विनम्र होते हैं जो पृष्ठ लोड होने तक हर समय जगह लेते हैं। कम मांग वाले उपयोगों के लिए (जैसे कि हर 30 सेकंड या किसी अन्य चीज पर तुच्छ अपडाउन करने वाला), आप या तो सुरक्षित रूप से उपयोग कर सकते हैं।
ब्राउज़र संगतता के संदर्भ में, सेटटाइमआउट सेटइंटरवल से पूर्ववर्ती है, लेकिन आज मिलने वाले सभी ब्राउज़र दोनों का समर्थन करेंगे। कई वर्षों के लिए अंतिम स्ट्रगलर WinMo <6.5 में IE मोबाइल था, लेकिन उम्मीद है कि वह भी अब हमारे पीछे है।