Langere levensduur van servicemedewerkers

Extensieservicemedewerkers kunnen nu in leven blijven zolang ze gebeurtenissen ontvangen. Dit vergroot de betrouwbaarheid van medewerkers van de voorlichtingsdiensten, maar er is een valkuil die u moet vermijden.

Joe Medley
Joe Medley

Vanaf Chrome 110 (in bèta vanaf 7 februari 2023) blijven medewerkers van de uitbreidingsservice in leven zolang ze gebeurtenissen ontvangen. Dit corrigeert een timingprobleem bij de eerdere implementatie van voorlichters. Het was mogelijk dat time-outs optraden wanneer er nieuwe gebeurtenissen in de gebeurteniswachtrij stonden en dat de time-outs asynchrone werkzaamheden afkapten. Deze verbetering maakt een einde aan de harde maximale levensduur van vijf minuten voor medewerkers van de uitbreidingsservice.

Dit artikel beschrijft hoe dit gedrag is veranderd.

Achtergrond

Extensieservicemedewerkers gedragen zich meestal als webservicemedewerkers, maar naast servicemedewerkergebeurtenissen kunnen extensieservicemedewerkers ook luisteren naar extensiegebeurtenissen. Terwijl normale servicemedewerkergebeurtenissen de levensduur van de servicemedewerker verlengen, hielden vóór de release van 110 slechts enkele uitbreidingsplatformgebeurtenissen een servicemedewerker in leven.

Normaal gesproken ontslaat Chromium een ​​servicemedewerker nadat aan een van de volgende voorwaarden is voldaan:

  • De servicemedewerker heeft al meer dan dertig seconden geen gebeurtenis ontvangen en er zijn geen openstaande langlopende taken in uitvoering. Als een servicemedewerker gedurende die tijd een gebeurtenis ontving, werd de inactieve timer verwijderd.
  • Het voltooien van een langlopende taak heeft meer dan vijf minuten geduurd en er zijn de afgelopen dertig seconden geen gebeurtenissen ontvangen.

Nieuwe servicemedewerkergebeurtenissen die worden ontvangen voordat de inactieve timer of de langlopende taaktimer afloopt, zouden de timers opnieuw instellen en de levensduur van de servicemedewerker verlengen.

Helaas was dit gedrag niet van toepassing op extensiegebeurtenissen. Extensiegebeurtenissen kunnen een extensieservicemedewerker wekken en in leven houden totdat de gebeurtenis is voltooid, maar de inactieve timer van dertig seconden kan niet worden verlengd. Dit betekende in feite dat medewerkers van de extensieservice op elk moment konden worden beëindigd nadat de laatste extensiegebeurtenis was voltooid, zelfs als de browser zojuist een nieuwe gebeurtenis naar de extensie had verzonden.

Wat is er veranderd

Vanaf Chrome 110 wordt bij alle gebeurtenissen de timer voor inactiviteit opnieuw ingesteld. De time-out voor inactiviteit treedt niet meer op als er gebeurtenissen in behandeling zijn. Met andere woorden: ervan uitgaande dat er geen onverwachte onderbrekingen zijn, zullen medewerkers van de uitbreidingsdienst nu doorgaans in leven blijven zolang ze actief bezig zijn met het verwerken van gebeurtenissen. Bovendien zullen aanroepen van extensiespecifieke Chrome-API's, zoals chrome.storage.local.get() , de time-out voor inactiviteit opnieuw instellen. Specifiek:

  • De servicemedewerker wordt beëindigd na 30 seconden inactiviteit. (Als u een gebeurtenis ontvangt of een extensie-API aanroept, wordt deze timer opnieuw ingesteld).
  • De servicemedewerker wordt beëindigd als de verwerking van een enkel verzoek, zoals een gebeurtenis of API-aanroep, langer dan vijf minuten duurt.

Sommige API's, zoals native messaging, bieden een sterke keep-alive die beide timers annuleert.

We werken er nog steeds aan om ervoor te zorgen dat medewerkers van de uitbreidingsdienst indien mogelijk worden ontslagen, zonder langlopend werk stil te leggen. Hulpbronbewuste medewerkers van de voorlichtingsdienst moeten waar mogelijk altijd toegeven. Bovendien moeten extensies zich voorbereiden op onverwachte beëindiging door de status aan te houden. Dit beschermt tegen onvoorspelbare gebeurtenissen, zoals het met geweld sluiten van de browser door de gebruiker.

Foto door Paula Guerreiro op Unsplash