टेस्ट एक
मैंने इस उद्देश्य के लिए विशेष रूप से एक परीक्षण लिखा है:
फ़्रेम दर वितरण: सेटइंटरवल बनाम अनुरोधअनामकरणफ्रेम
नोट: यह परीक्षण काफी सीपीयू गहन है। requestAnimationFrame
IE 9- और ओपेरा 12- द्वारा समर्थित नहीं है।
परीक्षण विभिन्न ब्राउज़रों में चलने setInterval
और requestAnimationFrame
चलाने के लिए वास्तविक समय में लॉग करता है, और आपको वितरण के रूप में परिणाम देता है। आप setInterval
यह देखने के लिए कि यह अलग-अलग सेटिंग्स में कैसे चलता है , मिलिसेकंड की संख्या को बदल सकते हैं । देरी के संबंध में setTimeout
इसी तरह काम करता है setInterval
। requestAnimationFrame
आमतौर पर ब्राउज़र के आधार पर 60fps के लिए चूक। यह देखने के लिए कि जब आप किसी भिन्न टैब पर स्विच करते हैं या एक निष्क्रिय विंडो होती है, तो केवल पृष्ठ खोलें, भिन्न टैब पर स्विच करें और थोड़ी देर प्रतीक्षा करें। यह एक निष्क्रिय टैब में इन कार्यों के लिए वास्तविक समय में लॉग इन करना जारी रखेगा।
टेस्ट दो
एक अन्य तरीका यह परीक्षण करने के लिए के साथ बार-बार टाइमस्टैम्प लॉग इन करने की है setInterval
और requestAnimationFrame
और एक अलग कंसोल में इसे देखने के। टैब या विंडो को निष्क्रिय करते समय आप देख सकते हैं कि यह कितनी बार अपडेट किया गया है (या यदि यह कभी अपडेट हुआ है)।
परिणाम
जब क्रोम निष्क्रिय होता है तो क्रोम
क्रोम न्यूनतम setInterval
1000 मीटर के अंतराल को सीमित कर देता है। यदि अंतराल 1000ms से अधिक है, तो यह निर्दिष्ट अंतराल पर चलेगा। इससे कोई फर्क नहीं पड़ता कि खिड़की फ़ोकस से बाहर है, अंतराल केवल तभी सीमित है जब आप किसी भिन्न टैब पर स्विच करते हैं। requestAnimationFrame
टैब के निष्क्रिय होने पर रोका जाता है।
// Provides control over the minimum timer interval for background tabs.
const double kBackgroundTabTimerInterval = 1.0;
https://codereview.chromium.org/6546021/patch/1001/2001
क्रोम के
समान फ़ायरफ़ॉक्स , फ़ायरफ़ॉक्स न्यूनतम अंतराल setInterval
को लगभग 1000ms तक सीमित करता है जब टैब (विंडो नहीं) निष्क्रिय होता है। हालांकि, requestAnimationFrame
टैब के निष्क्रिय होने पर घातीय रूप से धीमी गति से चलता है, जिसमें प्रत्येक फ्रेम 1s, 2s, 4s, 8s और इसी तरह से होता है।
// The default shortest interval/timeout we permit
#define DEFAULT_MIN_TIMEOUT_VALUE 4 // 4ms
#define DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE 1000 // 1000ms
https://hg.mozilla.org/releases/mozilla-release/file/0bf1cadfb004/dom/base/nsGlobalWindow.cpp#l296
इंटरनेट एक्सप्लोरर
IE setInterval
टैब के निष्क्रिय होने पर देरी को सीमित नहीं करता है, लेकिन यह requestAnimationFrame
निष्क्रिय टैब में रुक जाता है। इससे कोई फर्क नहीं पड़ता कि खिड़की फ़ोकस से बाहर है या नहीं।
एज
14 से शुरू होकर, setInterval
निष्क्रिय टैब में 1000ms पर छाया हुआ है। requestAnimationFrame
हमेशा निष्क्रिय टैब में रोका जाता है।
सफारी
क्रोम की तरह, setInterval
टैब निष्क्रिय होने पर सफारी 1000ms पर कैप करता है। requestAnimationFrame
रुका हुआ है।
ओपेरा
वेबकिट इंजन को अपनाने के बाद से, ओपेरा क्रोम के समान व्यवहार प्रदर्शित करता है। setInterval
1000 मी पर छाया हुआ है और requestAnimationFrame
टैब निष्क्रिय होने पर रुका हुआ है।
सारांश
निष्क्रिय टैब के लिए दोहराए जाने वाले अंतराल:
setInterval requestAnimationFrame
Chrome
9- प्रभावित नहीं समर्थित नहीं
10 प्रभावित नहीं हुआ
11+> = 1000ms रुके
फ़ायरफ़ॉक्स
3- प्रभावित नहीं समर्थित नहीं
4 प्रभावित नहीं 1s
5+> = 1000ms 2 n s (n = निष्क्रियता के बाद से फ्रेम की संख्या)
अर्थात
9- प्रभावित नहीं समर्थित नहीं
10+ प्रभावित नहीं हुआ
धार
13- प्रभावित नहीं रोका गया
14+> = 1000ms रुके
सफारी
5- प्रभावित नहीं समर्थित नहीं
6 प्रभावित नहीं हुआ
7+> = 1000ms रुके
ओपेरा
12- प्रभावित नहीं समर्थित नहीं
15+> = 1000ms रुके