Chrome 57 में बैकग्राउंड टैब

बैकग्राउंड टैब से ब्राउज़र की परफ़ॉर्मेंस पर बुरा असर पड़ सकता है, खास तौर से बैटरी लाइफ़ पर. इसे कम करने के लिए, Chrome पिछले कई सालों से बैकग्राउंड टैब पर कई पाबंदियां लगा रहा है. हाल ही में, और सुधार करने के लिए कई कोशिशें की गई हैं. इस दस्तावेज़ में, Chrome नीति की खास जानकारी दी गई है. इस दस्तावेज़ में, Chrome 57 की मौजूदा नीतियों के बारे में जानकारी दी गई है. लंबे समय तक चलने वाली रणनीति और आगे की योजनाएं इस दस्तावेज़ में देखी जा सकती हैं.

बैकग्राउंड के लिए किसी ऐप्लिकेशन को ऑप्टिमाइज़ करना

वेब डेवलपर को यह पता होना चाहिए कि उपयोगकर्ताओं के बैकग्राउंड में अक्सर कई टैब खुले रहते हैं. इससे पावर के इस्तेमाल और बैटरी लाइफ़ पर गंभीर असर पड़ सकता है. अगर कोई खास उपयोगकर्ता अनुभव देने के लिए ऐसा करना ज़रूरी न हो, तो बैकग्राउंड में काम करना ज़रूरी है. पेज विज़िबिलिटी एपीआई का इस्तेमाल, यह पता लगाने के लिए किया जाना चाहिए कि पेज को कब बैकग्राउंड में रखा गया है. साथ ही, विज़ुअल अपडेट जैसे सभी गैर-ज़रूरी कामों को निलंबित करें.

कुछ साइटों के लिए, इस आसान ऑप्टिमाइज़ेशन से सीपीयू का इस्तेमाल 75% तक कम हो सकता है:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

नीतियां

requestAnimationFrame()

दस्तावेज़ के मुताबिक, जब कोई पेज बैकग्राउंड में होता है, तो Chrome requestAnimationFrame() को कॉल नहीं करता. यह तरीका 2011 से लागू है.

बैकग्राउंड टाइमर का अलाइनमेंट

Chrome 11 से, हर स्वतंत्र टाइमर को एक सेकंड में एक से ज़्यादा बार नहीं चलाया जाता. Chrome इन टाइमर को एक सेकंड में एक बार बैच में चलाता है, जिससे यह पक्का होता है कि प्रोसेस की स्क्रीन चालू होने की संख्या कम से कम रहे. जिन पेजों पर सुना जा सकने वाला ऑडियो सुनाई देता है वे उपयोगकर्ताओं को दिखते हैं. साथ ही, उन्हें बैकग्राउंड टाइमर थ्रॉटलिंग से छूट दी जाती है. ऑडियो बंद होने के कुछ सेकंड बाद तक, यह सुविधा बंद रहती है. इससे ऐप्लिकेशन को अगले ऑडियो ट्रैक की सूची बनाने की अनुमति मिल जाती है.

ध्यान दें कि ऑडियो को तब ही सुना जा सकता है, जब Chrome से ऑडियो आइकॉन दिखता है. साइलेंट ऑडियो स्ट्रीम पर छूट नहीं मिलती है.

बजट के हिसाब से बैकग्राउंड टाइमर थ्रॉटलिंग

Chrome 57 में शिपिंग, बजट-आधारित टाइमर थ्रॉटलिंग, टाइमर अलाइन करने की तकनीक का एक और विस्तार है. इससे बैकग्राउंड टाइमर के लिए सीपीयू के इस्तेमाल पर एक अतिरिक्त सीमा लागू की गई है. यह इस तरह काम करता है:

  • बैकग्राउंड में टाइमर चलाने के लिए, हर बैकग्राउंड टैब का एक तय समय (सेकंड में) होता है.
  • बैकग्राउंड में 10 सेकंड बाद, पेज पर समयसीमा लागू होती है.
  • टाइमर टास्क को सिर्फ़ तब चलाया जा सकता है, जब टाइम बजट ऋणात्मक न हो.
  • टाइमर लागू होने के बाद, इसके चलने के कुल समय को बजट से घटा दिया जाता है.
  • बजट, समय के साथ लगातार अपने-आप जनरेट होता रहता है. फ़िलहाल, यह दर 0.01 सेकंड प्रति सेकंड पर सेट है. ध्यान दें कि इस बजट को फिर से जनरेट करने की दर को बदला जा सकता है, क्योंकि Chrome थ्रॉटलिंग व्यवहार के बारे में ज़्यादा डेटा इकट्ठा करता है.

इस थ्रॉटलिंग से कई तरह की छूट अपने-आप छूट सकती हैं:

  • ऑडियो चलाने वाले ऐप्लिकेशन को फ़ोरग्राउंड माना जाता है और उन्हें थ्रॉटल नहीं किया जाता.
  • रीयल-टाइम कनेक्शन (WebSockets और WebRTC) वाले ऐप्लिकेशन का इस्तेमाल करते हैं, ताकि इन कनेक्शन को टाइम आउट के ज़रिए बंद होने से रोका जा सके. इन मामलों में, रन-टाइमर-एक-सेकंड-एक-सेकंड का नियम अब भी लागू होता है.

ध्यान दें कि यह तरीका वॉल टाइम का इस्तेमाल करता है, न कि सीपीयू समय का. यह सीपीयू समय का अच्छा अनुमान है और मुख्य थ्रेड को लंबे समय के लिए ब्लॉक करने वाली सुविधा को बंद कर देता है.

आखिर में, याद रखें कि अगर आप बैकग्राउंड में लंबे टास्क इस्तेमाल कर रहे हैं, तो आपके ऐप्लिकेशन को लंबे समय के लिए (आपके टास्क की अवधि के 100 गुना तक) के लिए थ्रॉटल किया जा सकता है. परफ़ॉर्मेंस के लिए दिए गए दिशा-निर्देशों के हिसाब से, अपने टास्क को 50 मि॰से॰ या उससे कम में बांटें. साथ ही, बैकग्राउंड में ग़ैर-ज़रूरी काम करने से बचने के लिए, visibilityChange लिसनर का इस्तेमाल करें.

ऑप्ट-आउट

इस्तेमाल के उदाहरणों के लिए, Chrome --disable-background-timer-throttling फ़्लैग उपलब्ध कराता है. जैसे, रनिंग टेस्ट सुइट और उपयोगकर्ता की मंज़ूरी वाले अन्य हैवी कंप्यूटेशन.