Tabs im Hintergrund können sich negativ auf die Browserleistung auswirken, insbesondere die Akkulaufzeit. Um dies zu vermeiden, platziert Chrome verschiedene Einschränkungen für Tabs im Hintergrund in den letzten Jahren. In letzter Zeit wurden einige Maßnahmen ergriffen, um weitere Verbesserungen vorzunehmen. In diesem Dokument finden Sie einen Überblick über die Chrome-Richtlinie. In diesem Dokument werden die aktuellen Richtlinien in Chrome 57 beschrieben. Die langfristige Strategie und weitere Pläne finden Sie in diesem Dokument.
Apps für den Hintergrund optimieren
Webentwickler sollten sich bewusst sein, dass Nutzer oft viele Tabs im Hintergrund geöffnet haben, was sich erheblich auf den Energieverbrauch und die Akkulaufzeit auswirken kann. Die Ausführung im Hintergrund sollte auf ein Minimum beschränkt werden, es sei denn, dies ist für eine bestimmte Nutzererfahrung unbedingt erforderlich. Mit der Page Visibility API können Sie erkennen, wenn die Seite im Hintergrund angezeigt wird, und alle unnötigen Aufgaben wie visuelle Aktualisierungen pausieren.
Bei einigen Websites Diese einfache Optimierung kann die CPU-Nutzung um bis zu 75 % reduzieren:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
Richtlinien
requestAnimationFrame()
Gemäß der Dokumentation
Chrome ruft requestAnimationFrame()
nicht auf, wenn eine Seite im Hintergrund ausgeführt wird.
Dieses Verhalten gilt seit 2011.
Timer-Ausrichtung im Hintergrund
Seit Chrome 11 wird jeder unabhängige Timer nicht mehr als einmal pro Sekunde ausgeführt. Chrome führt diese Timer einmal pro Sekunde in Batches aus, um die Anzahl der Prozessaufweckungen auf ein Minimum zu beschränken. Seiten, auf denen hörbare Audioinhalte wiedergegeben werden, gelten als für Nutzer sichtbar und sind von der Drosselung von Timern im Hintergrund ausgenommen. Die Ausnahme gilt einige Sekunden nach dem Ende der Audiowiedergabe, damit Apps den nächsten Audiotrack in die Warteschlange stellen können.
Beachten Sie, dass Audioinhalte nur dann hörbar sind, wenn das Symbol „Audio“ in Chrome angezeigt wird. Für stumme Audiostreams gelten keine Ausnahmen.
Budgetbasierte Drosselung von Hintergrund-Timern
Die budgetbasierte Timerdrosselung ist eine weitere Erweiterung des Timer-Ausrichtungsmechanismus, die in Chrome 57 eingeführt wurde. Sie schränkt die CPU-Auslastung von Timern im Hintergrund zusätzlich ein. So funktioniert es:
- Jeder Tab im Hintergrund hat ein Zeitbudget (in Sekunden) für die Ausführung von Timern im Hintergrund.
- Nach 10 Sekunden im Hintergrund unterliegt eine Seite Einschränkungen des Zeitbudgets.
- Eine Timer-Aufgabe kann nur ausgeführt werden, wenn das Zeitbudget nicht negativ ist.
- Nach der Ausführung eines Timers wird seine Laufzeit vom Budget abgezogen.
- Das Budget wird kontinuierlich mit der Zeit neu generiert (derzeit auf 0,01 Sekunden pro Sekunde festgelegt). Diese Rate kann angepasst werden, sobald Chrome mehr Daten zum Drosselungsverhalten erfasst hat.
Es gibt eine Reihe automatischer Ausnahmen von dieser Drosselung:
- Anwendungen, die Audio abspielen, gelten als im Vordergrund ausgeführt und werden nicht gedrosselt.
- Anwendungen mit Echtzeitverbindungen (WebSockets und WebRTC), um zu verhindern, dass diese Verbindungen aufgrund einer Zeitüberschreitung geschlossen werden. Die Regel „Laufzeit: Einmal pro Sekunde“ gilt weiterhin die in diesen Fällen angewendet werden.
Beachten Sie, dass sein Mechanismus die Echtzeit-Zeit und nicht die CPU-Zeit verwendet. Sie ist eine gute Näherung an die CPU-Zeit und bestraft das Blockieren des Hauptthreads über einen längeren Zeitraum.
Wenn Sie lange Aufgaben im Hintergrund ausführen,
über einen sehr langen Zeitraum gedrosselt werden kann (bis zu 100-mal so lang wie die Ausführungsdauer Ihrer Aufgabe).
Teilen Sie Ihre Arbeit in Blöcke von maximal 50 ms pro
die Leistungsrichtlinien
und verwenden Sie den visibilityChange
-Listener, um unnötige Vorgänge im Hintergrund zu vermeiden.
Deaktivierung
Chrome stellt das Flag --disable-background-timer-throttling
für folgende Anwendungsfälle bereit:
Testsuites und andere von Nutzern genehmigte, umfangreiche Berechnungen ausführen.