De levenscyclus van de uitbreidingsservicemedewerker

Extensieservicewerknemers reageren op zowel de standaard servicewerknemergebeurtenissen als op gebeurtenissen in extensienaamruimten. Ze worden samen gepresenteerd omdat vaak het ene type het andere volgt tijdens het gebruik van een extensie.

Installatie

De installatie vindt plaats wanneer de gebruiker een servicemedewerker uit de Chrome Web Store installeert of bijwerkt, of wanneer hij een uitgepakte extensie laadt of bijwerkt via de pagina chrome://extensions . Drie gebeurtenissen vinden plaats in de onderstaande volgorde.

ServiceWorkerRegistratie.install

De eerste gebeurtenis die tijdens de installatie wordt geactiveerd, is de installatiegebeurtenis van een webservicewerker.

chrome.runtime.onGeïnstalleerd

Het volgende is de onInstalled gebeurtenis van de extensie, die wordt geactiveerd wanneer de extensie (niet de servicemedewerker) voor het eerst wordt geïnstalleerd, wanneer de extensie wordt bijgewerkt naar een nieuwe versie en wanneer Chrome wordt bijgewerkt naar een nieuwe versie. Gebruik deze gebeurtenis om een ​​status in te stellen of voor eenmalige initialisatie, zoals een contextmenu .

chrome.runtime.onInstalled.addListener((details) => {
  if(details.reason !== "install" && details.reason !== "update") return;
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

ServiceWorkerRegistratie.actief

Ten slotte wordt de activeringsgebeurtenis van de servicemedewerker geactiveerd. Houd er rekening mee dat, in tegenstelling tot webservicewerknemers, deze gebeurtenis onmiddellijk na de installatie van een extensie wordt geactiveerd, omdat er niets vergelijkbaars is met het opnieuw laden van een pagina in een extensie.

Extensie opstarten

Wanneer een gebruikersprofiel start, wordt de gebeurtenis chrome.runtime.onStartup geactiveerd, maar worden er geen servicewerknemersgebeurtenissen aangeroepen.

Inactief en uitgeschakeld

Normaal gesproken beëindigt Chrome een servicemedewerker als aan een van de volgende voorwaarden wordt voldaan:

  • Na 30 seconden inactiviteit. Als u een gebeurtenis ontvangt of een extensie-API aanroept, wordt deze timer opnieuw ingesteld.
  • Wanneer de verwerking van een enkel verzoek, zoals een gebeurtenis of API-oproep, langer dan vijf minuten duurt.
  • Wanneer het meer dan 30 seconden duurt voordat een fetch() antwoord arriveert.

Gebeurtenissen en oproepen naar extensie-API's resetten deze timers, en als de servicemedewerker inactief is geworden, zal een binnenkomende gebeurtenis deze weer tot leven wekken. Niettemin moet u uw servicemedewerker zodanig ontwerpen dat hij bestand is tegen onverwacht ontslag.

Om het resourceverbruik van uw toestel te optimaliseren, moet u indien mogelijk voorkomen dat uw servicemedewerker voor onbepaalde tijd in leven blijft. Test uw extensies om er zeker van te zijn dat u dit niet onbedoeld doet.

Bewaar gegevens in plaats van globale variabelen te gebruiken

Alle globale variabelen die u instelt, gaan verloren als de servicemedewerker wordt afgesloten. In plaats van globale variabelen te gebruiken, kunt u waarden opslaan in de opslag. Uw opties staan ​​hieronder vermeld. Houd er rekening mee dat de Web Storage API niet beschikbaar is voor extensieservicemedewerkers.

chrome.storage-API
Een uitbreidings-API die meerdere soorten opslag biedt; lokaal, sessie, beheerd (domein) en synchronisatie. Deze API slaat JSON-objecten op die zijn geïdentificeerd en opgehaald met door de ontwikkelaar gedefinieerde sleutels. Dit type opslag wordt niet verwijderd wanneer een gebruiker de webcache wist.
GeïndexeerdeDB-API
Een low-level API voor opslag aan de clientzijde van gestructureerde gegevens, inclusief bestanden en blobs. Deze API biedt primitieven voor het creëren en ophalen van transactionele gegevens. Hoewel deze API vaak te ingewikkeld is voor eenvoudige gebruiksscenario's, worden er een aantal opslagoplossingen van derden bovenop gebouwd.
CacheStorage-API
Een persistent opslagmechanisme voor Request- en Response-objectparen. Deze API is speciaal ontworpen voor webservicemedewerkers en wordt gebruikt om gegevens van een eindpunt op te halen. Er zijn verschillende manieren om deze API te gebruiken, afhankelijk van of en hoe belangrijk het is dat gebruikers actuele gegevens zien. Zie Het offline kookboek voor meer informatie. Tenzij u specifiek netwerkverzoeken proxy via de fetch-handler, moet u chrome.storage gebruiken.

Kies een minimale Chrome-versie

Sinds de release van Manifest V3 hebben we verschillende verbeteringen aangebracht in de levensduur van servicemedewerkers. Dit betekent dat als uw Manifest V3-extensie eerdere versies van Chrome ondersteunt, er voorwaarden zijn waar u rekening mee moet houden. Als deze voorwaarden geen invloed hebben op uw verlenging, kunt u verder gaan met dit gedeelte. Als dit het geval is, kunt u overwegen een minimale Chrome-versie op te geven in uw manifest.

Chroom 120

Alarmen kunnen nu worden ingesteld op een periode van minimaal 30 seconden, passend bij de levenscyclus van servicemedewerkers. Zie chrome.alarms voor meer details.

Chroom 118

Actieve debuggersessies die zijn gemaakt met de chrome.debugger API houden de servicemedewerker nu in leven. Dit voorkomt dat servicemedewerkers een time-out krijgen tijdens oproepen voor deze API.

Chroom 116

Chrome 116 introduceert de volgende levenslange verbeteringen voor servicemedewerkers:

  • Actieve WebSocket verbindingen verlengen nu de levensduur van extensieservicemedewerkers. Bij het verzenden of ontvangen van berichten via een WebSocket in een extensieservicemedewerker wordt de inactiviteitstimer van de servicemedewerker opnieuw ingesteld.

  • Extra uitbreidings-API's mogen voorbij de time-outperiode van vijf minuten gaan voor medewerkers van de uitbreidingsservice. Deze API's geven een gebruikersprompt weer en het kan dus redelijkerwijs langer dan vijf minuten duren om het probleem op te lossen. Deze omvatten desktopCapture.chooseDesktopMedia() , identity.launchWebAuthFlow() , management.uninstall() en permissions.request() .

Chroom 114

Het verzenden van een bericht met behulp van berichten met een lange levensduur houdt de servicemedewerker in leven. Voorheen werden bij het openen van een poort de timers gereset, maar bij het verzenden van een bericht gebeurde dit niet. Als u een poort opent, worden de timers niet langer opnieuw ingesteld.

Chroom 110

Extensie-API-aanroepen resetten de timers. Voorheen konden alleen het uitvoeren van gebeurtenishandlers een servicemedewerker in leven houden. Gebeurtenissen die in de wachtrij stonden, maar waarvoor geen handler was aangeroepen, zouden geen reset veroorzaken.

Chroom 109

Berichten die vanuit een document buiten het scherm worden verzonden, stellen de timers opnieuw in.

Chroom 105

Door verbinding te maken met een native messaging-host met behulp van chrome.runtime.connectNative() blijft een servicemedewerker in leven. Als het hostproces crasht of wordt afgesloten, wordt de poort gesloten en wordt de servicemedewerker beëindigd nadat de timers zijn voltooid. Bescherm u hiertegen door chrome.runtime.connectNative() aan te roepen in de onDisconnect-gebeurtenishandler van de poort.