Bagaimana Situs Web Memboroskan CPU dan Baterai
(h.43z.one)-
Menemukan masalah: Menemukan masalah white noise yang muncul sesekali dari speaker di laptop baru. Suara itu hanya bisa terdengar di ruangan yang tenang.
-
Analisis penyebab: Setelah memeriksa status audio sink PulseAudio, ditemukan bahwa pada status SUSPENDED tidak ada suara, tetapi pada status IDLE atau RUNNING muncul white noise.
-
Masalah Firefox: Firefox terlihat sebagai program yang menggunakan audio sink, dan white noise tetap muncul meskipun tidak ada tab terbuka yang sedang memutar suara.
-
Penyebab: Ternyata suara notifikasi dari outlook.office.com adalah penyebab masalah. Setiap kali menerima email, white noise mulai terdengar, dan hanya berhenti jika tab dimuat ulang atau Firefox dimulai ulang.
-
Pengurasan baterai: Saat white noise muncul, penggunaan CPU dan baterai juga meningkat.
-
Percobaan solusi: Mencoba menyelesaikan masalah dengan menonaktifkan notifikasi email, tetapi masalah serupa juga terjadi di situs web lain.
-
Pemrosesan audio HTML/JavaScript: Metode untuk memutar audio mencakup tag `` dan WebAudio API. Ditemukan bahwa penyebab masalah muncul saat membuat AudioContext.
-
Perbedaan Firefox dan Chrome: Chrome otomatis menghentikan pemborosan baterai/CPU setelah beberapa waktu, tetapi Firefox tidak.
-
Solusi: Mengembangkan ekstensi yang otomatis menghentikan AudioContext dan menjalankannya kembali saat diperlukan. Tidak sempurna, tetapi cukup efektif.
1 komentar
Komentar Hacker News
Masalah ini sudah direncanakan dan penting. Akan segera diperbaiki. Kami minta maaf karena belum terselesaikan karena masalah prioritas. Secara pribadi, ini punya prioritas tinggi
Situs web yang membuka audio context dan tidak memutar apa pun kemungkinan sedang melakukan deteksi bot
Saya penasaran apakah masalah yang sama juga terjadi pada perangkat Android
White noise ini sudah lama membuat saya gila, tetapi saya tidak bisa melacaknya
Ketika output menjadi idle, sinyal SPDIF digital kehilangan sinkronisasi. Saat pemutaran dimulai lagi, perlu waktu untuk sinkron kembali, dan beberapa detik pertama audio pun hilang. Saya pernah menulis program yang menjaga output tetap terbuka tanpa membuang data ke jalur agar output tidak menjadi idle
Ini sepertinya bisa menjelaskan masalah di Android Firefox ketika ponsel kadang menghabiskan 10GB data per hari. Situs berita memutar audio dan memuat ulang iklan berulang kali, dan tab tidak masuk ke mode hemat daya karena audio. Saya sampai harus beralih ke Chrome karena tagihan data berulang
Di Chromium, kode yang menangani penghentian ini ada di sini
Saya menemukan masalah serupa di macOS juga (konsumsi daya yang dipicu audio, tanpa white noise)
Masalah ini memperbaiki halaman depan https://www.dr.dk/
Saya tidak begitu paham bagaimana
audioContextdiimplementasikan, tetapi ia sangat pintar dan dinamis. Memutar suara notifikasi itu seperti menggambar SVG dengan D3. Saya penasaran apakah ada hookserviceWorkerpada API yang lebih efisien untuk mendaftarkan pekerjaan berulang sederhana seperti handler notifikasi