Längere Lebensdauer der Extension Service Worker

Erweiterungs-Service-Worker können jetzt aktiv bleiben, solange sie Ereignisse empfangen. Dies erhöht die Zuverlässigkeit von Erweiterungsdiensten-Workern. Allerdings gibt es ein Problem, das Sie vermeiden sollten.

Joe Medley
Joe Medley

Ab Chrome 110 (Stand: 7. Februar 2023) sind Erweiterungs-Service-Worker aktiv, solange sie Ereignisse empfangen. Dadurch wird ein Zeitproblem bei der vorherigen Implementierung von Erweiterungs-Service-Workern behoben. Es war möglich, dass Zeitüberschreitungen auftreten, wenn sich neue Ereignisse in der Ereigniswarteschlange befanden, und die Zeitüberschreitungen asynchron verlaufen. Durch diese Verbesserung entfällt die maximale Lebensdauer von 5 Minuten für Erweiterungs-Service-Worker.

In diesem Artikel wird beschrieben, wie sich diese Verhaltensweisen geändert haben.

Hintergrund

Erweiterungs-Service-Worker verhalten sich meist wie Webdienst-Worker, aber neben Service-Worker-Ereignissen können Erweiterungs-Service-Worker auch Erweiterungsereignisse überwachen. Normale Service Worker-Ereignisse verlängern zwar die Lebensdauer eines Service Workers, aber vor der Veröffentlichung von 110 hielten nur wenige Ereignisse auf der Erweiterungsplattform den Service Worker aktiv.

Normalerweise beendet Chromium einen Service Worker, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der Service Worker hat länger als 30 Sekunden kein Ereignis empfangen und es sind keine ausstehenden Aufgaben mit langer Ausführungszeit in Bearbeitung. Wenn ein Service Worker in dieser Zeit ein Ereignis empfangen hat, wurde der Inaktivitäts-Timer entfernt.
  • Eine lang andauernde Aufgabe hat mehr als fünf Minuten in Anspruch genommen und in den letzten 30 Sekunden sind keine Ereignisse eingegangen.

Neue Service Worker-Ereignisse, die vor Ablauf des Timers für Inaktivität oder lange laufende Aufgaben empfangen wurden, würden die Timer zurücksetzen und die Lebensdauer des Service Workers verlängern.

Dieses Verhalten trat leider nicht auf Erweiterungsereignisse auf. Erweiterungsereignisse können einen Erweiterungs-Service-Worker wecken und aktiv halten, bis das Ereignis abgeschlossen ist. Der Inaktivitäts-Timer von dreißig Sekunden konnte jedoch nicht verlängert werden. Das bedeutete praktisch, dass Erweiterungs-Service-Worker jederzeit nach Abschluss des letzten Erweiterungsereignisses beendet werden konnten, selbst wenn der Browser gerade ein neues Ereignis an die Erweiterung ausgelöst hätte.

Was sich geändert hat

Ab Chrome 110 wird der Inaktivitäts-Timer durch alle Ereignisse zurückgesetzt. Das Zeitlimit bei Inaktivität tritt nicht mehr auf, wenn Ereignisse ausstehen. Anders ausgedrückt: Unter der Annahme, dass es keine unerwarteten Unterbrechungen gibt, bleiben Erweiterungs-Service-Worker jetzt normalerweise am Leben, solange sie aktiv Ereignisse verarbeiten. Darüber hinaus wird das Zeitlimit bei Inaktivität zurückgesetzt, wenn erweiterungsspezifische Chrome APIs wie chrome.storage.local.get() aufgerufen werden. Insbesondere:

  • Der Service Worker wird nach 30 Sekunden Inaktivität beendet. Wenn ein Ereignis empfangen oder eine Erweiterungs-API aufgerufen wird, wird dieser Timer zurückgesetzt.
  • Der Service Worker wird beendet, wenn die Verarbeitung einer einzelnen Anfrage, z. B. eines Ereignisses oder API-Aufrufs, länger als 5 Minuten dauert.

Einige APIs wie natives Messaging bieten ein starkes Keep-Alive-Verfahren, wodurch beide Timer abgebrochen werden.

Wir arbeiten weiterhin daran, dass Erweiterungs-Service-Worker nach Möglichkeit beendet werden, ohne lange laufende Arbeiten zu beenden. Ressourcenbewusste Erweiterungs-Service-Worker sollten immer nach Möglichkeit Ergebnisse liefern. Außerdem sollten Erweiterungen durch Beibehalten des Status auf eine unerwartete Beendigung vorbereitet sein. Dies schützt vor unvorhersehbaren Ereignissen wie einem erzwungenen Schließen des Browsers.

Foto von Paula Guerreiro auf Unsplash