वेबसाइटें CPU और बैटरी कैसे बर्बाद करती हैं
(h.43z.one)-
समस्या का पता: नए लैपटॉप में स्पीकर से बीच-बीच में white noise आने की समस्या मिली। यह केवल शांत कमरे में सुनाई देती थी।
-
कारण का विश्लेषण: PulseAudio की audio sink state जाँचने पर पता चला कि
SUSPENDEDस्थिति में आवाज़ नहीं आती, लेकिनIDLEयाRUNNINGस्थिति में white noise होता है। -
Firefox की समस्या: Firefox audio sink का उपयोग करने वाले प्रोग्राम के रूप में दिखा, जबकि खुले टैब्स में कोई भी टैब आवाज़ नहीं चला रहा था, फिर भी white noise हो रहा था।
-
असल कारण:
outlook.office.comकी notification sound इस समस्या की वजह निकली। हर बार ईमेल आने पर white noise शुरू हो जाता था, और इसे रोकने के लिए टैब refresh करना या Firefox को restart करना पड़ता था। -
बैटरी की खपत: white noise होने पर CPU और बैटरी की खपत बढ़ जाती थी।
-
समाधान की कोशिश: ईमेल notifications बंद करके समस्या हल करने की कोशिश की गई, लेकिन दूसरी वेबसाइटों पर भी ऐसी ही समस्या सामने आई।
-
HTML/JavaScript audio processing: audio चलाने के लिए `` टैग और WebAudio API होते हैं। जाँच में पता चला कि समस्या
AudioContextबनाए जाने पर होती है। -
Firefox और Chrome का अंतर: Chrome कुछ समय बाद अपने-आप बैटरी/CPU की बर्बादी रोक देता है, लेकिन Firefox ऐसा नहीं करता।
-
समाधान:
AudioContextको अपने-आप रोकने और ज़रूरत पड़ने पर फिर से शुरू करने वाला एक extension बनाया गया। यह परफेक्ट नहीं है, लेकिन पर्याप्त रूप से असरदार है।
1 टिप्पणियां
Hacker News टिप्पणियाँ
यह समस्या योजनाबद्ध है और महत्वपूर्ण है। इसे जल्द ठीक करने की योजना है। प्राथमिकता के कारण अभी तक ठीक न कर पाने के लिए क्षमा चाहते हैं। व्यक्तिगत रूप से इसकी प्राथमिकता मेरे लिए बहुत ऊँची है
जो वेबसाइट audio context खोलती है और कुछ भी प्ले नहीं करती, वह शायद bot detection कर रही हो सकती है
सोच रहा हूँ कि क्या यही समस्या Android devices पर भी होती है
यह white noise लंबे समय तक मुझे पागल करती रही, लेकिन मैं इसका पता नहीं लगा सका
जब output idle हो जाता है, तो digital SPDIF signal sync खो देता है। प्लेबैक शुरू होने पर यह फिर से sync होता है, लेकिन इसमें समय लगता है और ऑडियो के शुरुआती कुछ सेकंड खो जाते हैं। output को idle न होने देने के लिए मैंने ऐसा प्रोग्राम लिखा था जो लाइन में data dump किए बिना output को खुला रखता था
शायद यह समझा सकता है कि Android Firefox में कभी-कभी फोन एक दिन में 10GB data क्यों खर्च कर देता था। news sites ऑडियो चलाती थीं और ads को बार-बार लोड करती थीं, और टैब ऑडियो की वजह से sleep mode में नहीं जाता था। बार-बार data charges लगने के कारण मुझे Chrome पर जाना पड़ा
Chromium में इस interruption को संभालने वाला code यहाँ है
macOS पर भी इसी तरह की समस्या मिली (ऑडियो-प्रेरित power consumption, white noise नहीं)
इस समस्या ने https://www.dr.dk/ के पहले पेज को ठीक कर दिया
मुझे ठीक से नहीं पता कि audioContext कैसे implement किया गया है, लेकिन यह बहुत चतुर और dynamic है। notification sound चलाना वैसा है जैसे D3 से SVG बनाना। सोच रहा हूँ कि क्या किसी अधिक efficient API में ऐसा serviceWorker hook है जहाँ notification handler जैसी सरल आवर्ती प्रक्रियाएँ register की जा सकें