Hintergrundtabs in Chrome 57

Tabs im Hintergrund können die Leistung des Browsers erheblich beeinträchtigen, insbesondere auf die Akkulaufzeit. Um dies abzumildern, hat Chrome in den letzten Jahren verschiedene Einschränkungen für Tabs im Hintergrund festgelegt. In letzter Zeit haben wir eine Reihe von Bemühungen unternommen, um weitere Verbesserungen vorzunehmen. Dieses Dokument bietet einen Überblick über die Chrome-Richtlinien. In diesem Dokument werden die aktuellen Richtlinien in Chrome 57 beschrieben. Langfristige Strategien und weitere Pläne finden Sie in diesem Dokument.

Anwendung für den Hintergrund optimieren

Webentwickler sollten wissen, dass Nutzer häufig viele Tabs im Hintergrund geöffnet haben und dies erhebliche Auswirkungen auf den Stromverbrauch und die Akkulaufzeit haben kann. Die Arbeit im Hintergrund sollte auf ein Minimum beschränkt werden, es sei denn, die Bereitstellung einer bestimmten User Experience ist absolut notwendig. Die Page visibility API sollte verwendet werden, um zu erkennen, wenn eine Seite im Hintergrund zu sehen ist, und um alle unnötigen Vorgänge wie visuelle Aktualisierungen zu sperren.

Bei einigen Websites kann diese einfache Optimierung 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 ruft Chrome requestAnimationFrame() nicht auf, wenn sich eine Seite im Hintergrund befindet. Dieses Verhalten gibt es seit 2011.

Ausrichtung des Hintergrund-Timers

Seit Chrome 11 wird jeder unabhängige Timer nur einmal pro Sekunde ausgeführt. Chrome führt diese Timer einmal pro Sekunde im Batch aus, um die Anzahl der Prozess-Wakeups auf ein Minimum zu beschränken. Seiten, auf denen hörbare Audioinhalte wiedergegeben werden, gelten als für Nutzer sichtbar und von der Drosselung des Hintergrund-Timers ausgenommen. Die Ausnahme gilt für einige Sekunden, nachdem die Audiowiedergabe beendet wurde, damit Anwendungen den nächsten Audiotrack in die Warteschlange stellen können.

Hinweis: Audioinhalte gelten nur dann als hörbar, wenn Chrome das Audiosymbol anzeigt. Bei stummen Audiostreams gibt es keine Ausnahmen.

Budgetbasierte Drosselung des Hintergrund-Timers

Die budgetbasierte Timer-Drosselung ist in Chrome 57 eine weitere Erweiterung des Timer-Ausrichtungsmechanismus, der die CPU-Nutzung durch Hintergrund-Timer zusätzlich begrenzt. Sie funktioniert so:

  • Jeder Hintergrund-Tab hat ein Zeitbudget (in Sekunden), um Timer im Hintergrund laufen zu lassen.
  • Eine Seite unterliegt einem Zeitbudget, das nach zehn Sekunden im Hintergrund begrenzt ist.
  • Eine Timer-Aufgabe darf nur ausgeführt werden, wenn das Zeitbudget nicht negativ ist.
  • Nachdem ein Timer ausgeführt wurde, wird seine Laufzeit vom Budget abgezogen.
  • Das Budget wird im Laufe der Zeit kontinuierlich neu generiert (derzeit auf eine Rate von 0,01 Sekunden pro Sekunde festgelegt). Die Rate der Budgetneuerstellung kann angepasst werden, wenn Chrome mehr Daten zum Drosselungsverhalten erfasst.

Es gibt eine Reihe automatischer Ausnahmen von dieser Drosselung:

  • Apps, die Audio wiedergeben, gelten als Vordergrund und werden nicht gedrosselt.
  • Anwendungen mit Echtzeitverbindungen (WebSockets und WebRTC), damit diese Verbindungen nicht durch Zeitüberschreitung geschlossen werden. In diesen Fällen wird weiterhin die Regel für die einmalige Ausführung des Timers angewendet.

Beachten Sie, dass für diesen Mechanismus die Echtzeit statt der CPU-Zeit verwendet wird. Dies ist ein guter Annäherung an die CPU-Zeit und wirkt sich negativ auf die lange Blockierung des Hauptthreads aus.

Denken Sie auch daran, dass Ihre Anwendung bei Verwendung langer Aufgaben im Hintergrund für einen sehr langen Zeitraum gedrosselt werden kann (bis zu 100-facher Dauer der Aufgabe). Teilen Sie Ihre Arbeit gemäß den Leistungsrichtlinien in Blöcke von maximal 50 ms auf und verwenden Sie den Listener visibilityChange, um unnötige Arbeit im Hintergrund zu vermeiden.

Deaktivierungen

Chrome stellt das Flag --disable-background-timer-throttling für Anwendungsfälle wie das Ausführen von Testsuiten und anderen vom Nutzer genehmigten umfangreichen Berechnungen bereit.