Durata di vita dei service worker di estensione maggiore

I service worker delle estensioni possono ora rimanere attivi fintanto che ricevono eventi. Ciò aumenta l'affidabilità dei lavoratori dei servizi di estensione, ma c'è un errore da evitare.

Joe Medley
Mario Bianchi

A partire da Chrome 110 (in versione beta a partire dal 7 febbraio 2023), i Service worker delle estensioni rimangono attivi finché ricevono eventi. In questo modo è stato corretto un problema di tempistica nella precedente implementazione dei service worker delle estensioni. Era possibile che si verificassero dei timeout quando nella coda degli eventi erano presenti nuovi eventi e che i timeout troncassero il lavoro asincrono. Questo miglioramento rimuove la durata massima di cinque minuti per i Service worker delle estensioni.

Questo articolo descrive come sono cambiati questi comportamenti.

Contesto

I Service worker delle estensioni si comportano principalmente come i Service worker web, ma oltre agli eventi dei Service worker, possono anche ascoltare gli eventi delle estensioni. Mentre i normali eventi del service worker estendono la durata del service worker, prima del rilascio di 110 solo alcuni eventi della piattaforma dell'estensione mantenevano attivo un service worker dell'estensione.

Normalmente Chromium termina un service worker dopo che si verifica una delle seguenti condizioni:

  • Il service worker non ha ricevuto un evento per più di trenta secondi e non sono in corso attività a lunga esecuzione in sospeso. Se un service worker ha ricevuto un evento durante questo periodo di tempo, il timer di inattività è stato rimosso.
  • Il completamento di un'attività di lunga durata ha richiesto più di cinque minuti e non sono stati ricevuti eventi negli ultimi 30 secondi.

I nuovi eventi del service worker ricevuti prima della scadenza del timer di inattività o del timer dell'attività a lunga esecuzione reimposteranno i timer e prolungheranno la durata del service worker.

Purtroppo questo comportamento non si applica agli eventi delle estensioni. Gli eventi dell'estensione potrebbero attivare un service worker dell'estensione e mantenerlo attivo fino al completamento dell'evento, ma non è stato possibile prolungare il timer di inattività di trenta secondi. In pratica, ciò significava che i Service worker dell'estensione potevano essere arrestati in qualsiasi momento dopo il completamento dell'ultimo evento dell'estensione, anche se il browser aveva appena inviato un nuovo evento all'estensione.

Che cosa è cambiato

A partire da Chrome 110, tutti gli eventi reimpostano il timer di inattività e il timeout per inattività non si verifica se sono presenti eventi in attesa. In altre parole, supponendo che non ci siano interruzioni impreviste, i Service worker delle estensioni di solito rimangono attivi finché elaborano attivamente gli eventi. Inoltre, le chiamate ad API di Chrome specifiche delle estensioni, ad esempio chrome.storage.local.get(), reimposteranno il timeout di inattività. In particolare:

  • Il service worker viene terminato dopo 30 secondi di inattività. La ricezione di un evento o la chiamata di un'API di estensione reimposta questo timer.
  • Il service worker viene terminato se l'elaborazione di una singola richiesta, ad esempio un evento o una chiamata API, richiede più di 5 minuti.

Alcune API, come la messaggistica nativa, forniscono un solido keep-alive che annulla entrambi i timer.

Stiamo ancora lavorando per garantire che i Service worker delle estensioni vengano terminati quando possibile, senza arrestare il lavoro a lunga esecuzione. I Service worker delle estensioni sensibili alle risorse dovrebbero sempre cedere quando possibile. Inoltre, le estensioni devono prepararsi alla chiusura imprevista mantenendo lo stato. Questa impostazione ti consente di evitare eventi imprevedibili, come la chiusura forzata del browser da parte dell'utente.

Foto di Paula Guerreiro su Unsplash