Persistenter Service Worker in der Chrome-Erweiterung: Eine Anleitung
In Chrome wird die Service Worker (SW)-Persistenz nicht grundsätzlich unterstützt. SWs sind konstruktionsbedingt so konzipiert, dass sie nach fünf Minuten Inaktivität entladen werden, was es schwierig macht, einen konstant laufenden Dienst aufrechtzuerhalten. In diesem Artikel untersuchen wir verschiedene Problemumgehungen, um Ihre SWs am Laufen zu halten und auf Ereignisse zu reagieren.
Bekannte Probleme und Einschränkungen
-
Inaktiv und Entlade-Timer: SWs verfügen über einen 30-Sekunden-Inaktivitäts-Timer und einen Entlade-Timer von fünf Minuten Timer.
-
Probleme bei der Ereignisausführung: Chrome aktiviert SWs möglicherweise nicht konsistent für alle webRequest-Ereignisse, insbesondere in älteren Versionen.
-
Häufige Ereignisbehandlung: Der Umgang mit häufigen Ereignissen wie webRequest und webNavigation kann zu häufigen SW-Neustarts führen und die Leistung beeinträchtigen negativ.
-
Aufeinanderfolgende API-Aufrufe: Das aufeinanderfolgende Aufrufen bestimmter Chrome-APIs kann dazu beitragen, die Lebensdauer der SW zu verlängern, dieser Ansatz wird jedoch als Bug-Exploit angesehen.
Problemumgehungen:
Bug Exploit (Chrome 110 ):
- Das Zuweisen des umschlossenen chrome.runtime.getPlatformInfo()-Aufrufs zu einer Variablen und der wiederholte Aufruf sorgen dafür, dass die SW länger läuft.
Offscreen-API (Chrome 109):
- Erstellen Sie ein Offscreen-Dokument, das sendet alle 30 Sekunden eine Nachricht an die SW. Diese Methode bietet derzeit eine unbegrenzte Lebensdauer, kann jedoch in Zukunft überarbeitet werden.
NativeMessaging API (Chrome 105):
- Verbinden der SW mit Ein nativeMessaging-Host hält es am Laufen, auch wenn der Host abstürzt oder wird geschlossen.
WebSocket-API (Chrome 116):
- Stellen Sie alle 25 Sekunden eine WebSocket-Verbindung her und tauschen Sie Nachrichten aus, um Inaktivität zu verhindern.
Chrome-Messaging API:
- Alle 30 Sekunden eine Nachricht von einem speziellen Tab an die SW senden. Dies erfordert weitreichende Host-Berechtigungen, vermeidet jedoch die Notwendigkeit nativer Apps oder APIs.
Dedizierter Tab:
- Öffnen Sie einen Browser-Tab mit einer Erweiterungsseite das mit der SW kommuniziert. Dieser Ansatz ahmt eine dauerhafte Hintergrundseite nach, verbraucht jedoch mehr Speicher und lenkt den Benutzer ab.
Vorsichtsmaßnahmen:
-
Übermäßiger Ressourcenverbrauch:Verwenden Sie Keep-Alive-Mechanismen nur bei Bedarf und deaktivieren Sie sie, sobald die Aufgaben abgeschlossen sind.
-
Zustandsverwaltung:Implementieren Sie eine Strategie um den SW-Status bei unerwarteten Abstürzen zu speichern und wiederherzustellen.
-
Persistente Annahme: Vermeiden Sie die Beibehaltung von SWs ausschließlich zum Zweck der Vereinfachung der Statusverwaltung. Verwenden Sie es hauptsächlich zur Leistungssteigerung in Fällen, in denen die Wiederherstellung des Zustands kostspielig ist oder als Reaktion auf häufige Ereignisse.
Das obige ist der detaillierte Inhalt vonWie kann ich den Service Worker meiner Chrome-Erweiterung dauerhaft halten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn