Wie Websites CPU und Akku verschwenden
(h.43z.one)-
Problem entdeckt: Auf einem neuen Laptop wurde ein Problem festgestellt, bei dem aus den Lautsprechern gelegentlich weißes Rauschen zu hören war. Es war nur in einem ruhigen Raum wahrnehmbar.
-
Ursachenanalyse: Bei der Überprüfung des Audio-Sink-Status von PulseAudio zeigte sich, dass im Zustand
SUSPENDEDkein Ton auftrat, im ZustandIDLEoderRUNNINGjedoch weißes Rauschen entstand. -
Das Problem mit Firefox: Firefox erschien als das Programm, das den Audio-Sink verwendete, obwohl unter den geöffneten Tabs keiner Ton abspielte, und trotzdem trat weißes Rauschen auf.
-
Ursache: Der Benachrichtigungston von outlook.office.com stellte sich als Auslöser des Problems heraus. Jedes Mal, wenn eine E-Mail eintraf, begann das weiße Rauschen und hörte erst auf, wenn der Tab neu geladen oder Firefox neu gestartet wurde.
-
Akkuverbrauch: Wenn das weiße Rauschen auftrat, stiegen auch CPU- und Akkuverbrauch.
-
Versuch einer Lösung: Es wurde versucht, das Problem durch Deaktivieren der E-Mail-Benachrichtigungen zu beheben, aber auch auf anderen Websites trat ein ähnliches Problem auf.
-
HTML-/JavaScript-Audioverarbeitung: Es gibt den ``-Tag und die WebAudio API als Methoden zur Audiowiedergabe. Es wurde festgestellt, dass das Problem beim Erstellen eines
AudioContextentsteht. -
Unterschied zwischen Firefox und Chrome: Chrome beendet die Verschwendung von Akku/CPU nach einer gewissen Zeit automatisch, Firefox jedoch nicht.
-
Lösung: Es wurde eine Erweiterung entwickelt, die
AudioContextautomatisch anhält und bei Bedarf wieder startet. Sie ist nicht perfekt, aber ausreichend wirksam.
1 Kommentare
Hacker-News-Kommentare
Das Problem ist geplant und wichtig. Es soll bald behoben werden. Es tut uns leid, dass es wegen Prioritätsfragen noch nicht gelöst wurde. Für mich persönlich hat es eine hohe Priorität
Eine Website, die einen Audio Context öffnet und nichts abspielt, führt vermutlich Bot-Erkennung durch
Ich frage mich, ob dasselbe Problem auch auf Android-Geräten auftritt
Dieses weiße Rauschen hat mich lange wahnsinnig gemacht, aber ich konnte die Ursache nicht finden
Wenn die Ausgabe in den Leerlauf geht, verliert das digitale SPDIF-Signal die Synchronisation. Wenn die Wiedergabe startet, dauert es eine Weile, bis wieder synchronisiert ist, und die ersten Sekunden des Audios gehen verloren. Ich habe ein Programm geschrieben, das die Ausgabe offen hält, ohne Daten auf die Leitung zu kippen, damit die Ausgabe nicht in den Leerlauf geht
Das könnte erklären, warum Android Firefox mein Handy gelegentlich an einem Tag 10 GB Daten verbrauchen ließ. Nachrichtenseiten spielten Audio ab und luden Werbung ständig neu, und der Tab wechselte wegen des Audios nicht in den Energiesparmodus. Wegen der wiederkehrenden Datenkosten musste ich zu Chrome wechseln
In Chromium steht der Code zur Behandlung dieser Unterbrechung hier
Ich habe ein ähnliches Problem auch unter macOS festgestellt (audiobedingter Stromverbrauch, kein weißes Rauschen)
Dieses Problem behebt die Startseite von https://www.dr.dk/
Ich weiß nicht genau, wie
audioContextimplementiert ist, aber es ist sehr clever und dynamisch. Einen Benachrichtigungston abzuspielen ist wie SVG mit D3 zu zeichnen. Ich frage mich, ob es in einer effizienteren API einenserviceWorker-Hook gibt, mit dem sich einfache wiederkehrende Aufgaben wie ein Benachrichtigungs-Handler registrieren lassen