बैकग्राउंड में खुले टैब से, ब्राउज़र की परफ़ॉर्मेंस पर काफ़ी बुरा असर पड़ सकता है. खास तौर पर, बैटरी लाइफ़ पर. इस समस्या को कम करने के लिए, 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
listener का इस्तेमाल करें.
ऑप्ट-आउट
Chrome, --disable-background-timer-throttling
फ़्लैग को इस्तेमाल के उदाहरणों के लिए उपलब्ध कराता है. जैसे, टेस्ट सुइट चलाना और उपयोगकर्ता की अनुमति वाले अन्य भारी हिसाब-किताब.