Veröffentlicht: 20. Januar 2025
Ab Chrome 133 (Februar 2025) werden infrage kommende CPU-intensive Tabs im Hintergrund eingefroren, wenn der Energiesparmodus aktiv ist. So soll der Akkuverbrauch für Nutzer reduziert werden, die den Energiesparmodus nutzen und für die jeder Prozentpunkt Akkulaufzeit zählt. Um Unterbrechungen zu minimieren, werden nur Tabs im Hintergrund eingefroren, die bestimmte Kriterien erfüllen und eine hohe CPU-Auslastung aufweisen.
Was ist ein Einfrieren?
Durch das Einfrieren wird die Ausführung von Aufgaben auf einer Webseite ausgesetzt. Dazu zählen:
- Ereignis-Handler (z. B. Eingabe, Netzwerk und Sensor)
- Timer
- Promise-Resolver
Das Einfrieren unterscheidet sich vom Verwerfen, bei dem ein Tab aus dem Arbeitsspeicher entladen wird. Wenn ein eingefrorener Tab wieder in den Fokus rückt, wird er automatisch entsperrt und alle Aufgaben in der Warteschlange werden ohne Statusverlust ausgeführt.
Die Ereignisse „freeze“ und „resume“ werden gesendet, wenn eine Seite eingefroren oder fortgesetzt wird (siehe API-Dokumentation zum Seitenlebenszyklus). Über diese Ereignisse kann die Seite nicht verwendete Ressourcen freigeben, einen Server benachrichtigen, dass die Seite pausiert ist, oder Messwerte erfassen.
Welche Seiten können eingefroren werden?
Das Einfrieren gilt für Gruppen mit Browserkontext.
Normalerweise besteht eine Gruppe von Browserkontexten aus einem einzelnen Tab. Bei der Verwendung von APIs wie window.open()
können jedoch mehrere Tabs zur selben Gruppe gehören.
Wenn der Energiesparmodus aktiviert ist, wird eine Gruppe von Browserkontexten eingefroren, wenn sie die folgenden Bedingungen erfüllt:
- Alle Seiten in der Gruppe sind seit mehr als fünf Minuten ausgeblendet und stummgeschaltet.
- Jede Untergruppe von Frames mit demselben Ursprung innerhalb der Gruppe ist „CPU-intensiv“.
- Die Gruppe darf Folgendes nicht:
- Audio- oder Videokonferenzfunktionen bereitstellen (erkannt über Mikrofon, Kamera, Bildschirm-/Fenster-/Tab-Aufnahme oder RTCPeerConnection mit einem „offenen“ RTCDataChannel oder einem „live“-MediaStreamTrack)
- Ein externes Gerät steuern (wird über Web USB, Web Bluetooth, Web HID oder Web Serial erkannt).
- Eine Websperre oder IndexedDB-Verbindung halten, die Vorgänge außerhalb der Gruppe blockiert
Die Definition von „CPU-intensiv“ kann sich ändern. Ziel ist es jedoch, effizient implementierte E-Mail- oder Chat-Clients oder Kalenderanwendungen auszuschließen, die Benachrichtigungen generieren.
Wenn alle Tabs innerhalb derselben Browserkontextgruppe gleichzeitig eingefroren werden, werden Unterbrechungen bei Apps mit Pop-ups minimiert, z. B. beim Verfassen von Nachrichten oder beim Eingeben von Anmeldedaten.
Wie kann ich meine Website vorbereiten?
Wenn Ihre Website keine Hintergrundfunktionen hat (z. B. Benachrichtigungen, Dateiuploads oder Inhaltsaktualisierungen), ist sie wahrscheinlich nicht von Einfrieren betroffen.
Wenn Ihre Website Hintergrundfunktionen hat, minimieren Sie die CPU-Auslastung im Hintergrund, damit sie nicht als CPU-intensiv eingestuft und eingefroren wird. Hier einige Tipps:
- Vermeiden Sie Timer für regelmäßige Statusänderungen.
- Verwenden Sie IntersectionObserver, um zu erkennen, wann ein Element den Viewport betritt.
- Verwenden Sie ResizeObserver, um Änderungen an der Elementgröße zu erkennen.
- Verwenden Sie für DOM-Änderungen MutationObserver oder Lebenszyklusereignisse für benutzerdefinierte Elemente.
- Verwenden Sie anstelle eines Polling-Servers Websockets, servergesendete Ereignisse, Push-Nachrichten oder Abrufstreams.
- Verwende Ereignisse wie „timeupdate“ und „ended“ für Audio- oder Videoänderungen.
Wir empfehlen außerdem, Hintergrundfunktionen zu einem Service Worker zu migrieren, damit sie nicht von Einfrieren betroffen sind. Ein Dienst-Worker ist nicht von Einfrieren betroffen und benötigt weniger Browserressourcen. Geeignete Methoden:
- Push API für Benachrichtigungen
- Background Synchronization API oder Web Periodic Background Synchronization API zum Abrufen von Updates
Betreiber von Websites können das Einfrieren deaktivieren, indem sie am Ursprungstest „BackgroundPageFreezeOptOut“ teilnehmen. Dieser Test wird eingestellt, sobald neue APIs zur Deklarierung wichtiger Hintergrundarbeit veröffentlicht werden, z. B. die Progress Notification API.
Ob ein Tab eingefroren werden kann, sehen Sie unter chrome://discards
. Hinweis: Auch wenn ein Tab eingefroren werden kann, wird dies in Chrome 133 nur dann getan, wenn er CPU-intensiv ist und der Energiesparmodus aktiv ist.
Nächste Schritte
Wenn Tabs im Hintergrund deaktiviert werden, wird Energie gespart. Das ist besonders für Nutzer wichtig, die den Energiesparmodus aktiviert haben.
Außerdem wird die Leistung von Tabs im Vordergrund verbessert und das Beenden von Tabs im Hintergrund wird verhindert, insbesondere auf Geräten mit begrenzten Ressourcen, da die CPU-Auslastung und der Speicherzugriff reduziert werden. Daher wird das Einfrieren von Tabs in Chrome auf weitere Situationen ausgeweitet. Änderungen werden unter blink-dev@chromium.org angekündigt. Damit dies mit minimalen Unterbrechungen für Anwendungsfälle im Hintergrund möglich ist, können Seiten mithilfe neuer APIs wie der Progress Notification API wichtige Hintergrundarbeiten angeben und ein Einfrieren verhindern.