Hintergrundtabs in Chrome 57

Tabs im Hintergrund können sich stark negativ auf die Browserleistung auswirken, insbesondere auf die Akkulaufzeit. Um dies zu vermeiden, hat Chrome in den letzten Jahren verschiedene Einschränkungen für Tabs im Hintergrund eingeführt. 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.

Anwendung für den Hintergrund optimieren

Webentwickler sollten sich darüber im Klaren sein, dass Nutzer oft viele Tabs im Hintergrund geöffnet haben, was erhebliche Auswirkungen auf den Stromverbrauch und die Akkulaufzeit haben 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 kann diese einfache Optimierung die CPU-Auslastung um bis zu 75 % senken:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

Richtlinien

requestAnimationFrame()

Gemäß der Dokumentation ruft Chrome requestAnimationFrame() nicht auf, wenn eine Seite im Hintergrund ist. Dieses Verhalten gilt seit 2011.

Hintergrund-Timer-Ausrichtung

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 Prozess-Wakeups zu minimieren. 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 nach dem Ende der Audiowiedergabe mehrere Sekunden lang, damit Anwendungen den nächsten Audiotrack in die Warteschlange stellen können.

Audio wird nur dann als hörbar betrachtet, wenn in Chrome das Audiosymbol angezeigt wird. Für stumme Audiostreams gelten keine Ausnahmen.

Budgetbasierte Drosselung von Timern im Hintergrund

In Chrome 57 ist die budgetbasierte Timer-Drosselung eine weitere Erweiterung des Timer-Ausrichtungsmechanismus, die ein zusätzliches Limit für die CPU-Nutzung von Hintergrund-Timern festlegt. 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 darf 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 Budgetwiederherstellungsrate 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 durch Zeitüberschreitung geschlossen werden. In diesen Fällen wird die Regel „Timer einmal pro Sekunde ausführen“ weiterhin angewendet.

Beachten Sie, dass bei diesem Mechanismus die tatsächlich verstrichene Zeit und nicht die CPU-Zeit verwendet wird. Sie ist eine gute Näherung an die CPU-Zeit und bestraft das Blockieren des Hauptthreads über einen längeren Zeitraum.

Denken Sie schließlich daran, dass Ihre Anwendung sehr lange gedrosselt werden kann, wenn Sie lange Aufgaben im Hintergrund verwenden (bis zu 100-mal so lange wie die Ausführungsdauer Ihrer Aufgabe). Teile deine Arbeit gemäß den Leistungsrichtlinien in Blöcke von maximal 50 Millisekunden auf und verwende den visibilityChange-Listener, um unnötige Arbeit im Hintergrund zu vermeiden.

Deaktivierung

Chrome bietet das Flag --disable-background-timer-throttling für Anwendungsfälle wie das Ausführen von Testsuites und anderen vom Nutzer genehmigten intensiven Berechnungen.