Collaborare con i Service worker

Questo codelab mostra come registrare un worker di servizio all'interno della tua applicazione web e utilizzare gli strumenti per sviluppatori di Chrome per osservarne il comportamento. Inoltre, illustra alcune tecniche di debug che potrebbero esserti utili durante Service worker.

Acquisisci familiarità con il progetto di esempio

I file nel progetto di esempio più pertinenti per questo codelab sono:

  • Il campo register-sw.js all'inizio è vuoto, ma conterrà il codice utilizzato per registrare il service worker. È già in fase di caricamento tramite <script> all'interno del tag index.html del progetto.
  • Anche service-worker.js è vuoto. È il file che conterrà il service worker per questo progetto.

Aggiungi il codice di registrazione del service worker

Un service worker (anche uno vuoto, come l'attuale file service-worker.js) non verrà utilizzato, a meno che registrato per prima cosa. Puoi farlo chiamando:

navigator.serviceWorker.register(
  '/service-worker.js'
)

all'interno del file register-sw.js.

Prima di aggiungere il codice, però, è necessario considerare un paio di punti .

Innanzitutto, non tutti i browser supporta Service worker. Questo vale in modo particolare per le versioni precedenti dei browser che non si aggiornano automaticamente. Quindi è buona norma chiamare navigator.serviceWorker.register() in modo condizionale, dopo aver controllato se navigator.serviceWorker è supportato.

In secondo luogo, quando registri un service worker, il browser esegue il codice nel tuo service-worker.js file e potrebbero iniziare a scaricare gli URL da compilare cache, a seconda del codice nel Service worker install e activate e gestori di eventi.

L'esecuzione di codice aggiuntivo e il download di asset possono utilizzare risorse preziose che il browser potrebbe altrimenti utilizzare per visualizzare lo stato pagina web. Per evitare questa interferenza, è buona norma ritardare registrando un service worker finché il browser non ha terminato il rendering pagina corrente. Un modo pratico per approssimare questo valore è attendere l'evento window.load.

Combinando questi due punti, aggiungi questo service worker per uso generico codice di registrazione al tuo file register-sw.js:

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js');
  });
}

Aggiungi del codice di logging del service worker

Il file service-worker.js è la posizione in cui normalmente viene inserita tutta la logica per l'implementazione del tuo worker di servizio. Dovresti utilizzare una combinazione di eventi di ciclo di vita del worker di servizio, dell'API Cache Storage e delle conoscenze sul traffico di rete della tua app web per creare un worker di servizio perfettamente realizzato, pronto a gestire tutte le richieste della tua app web.

Ma… questo è tutto per ora. In questa fase, l'attenzione è incentrata sull'osservazione vari eventi del service worker e di acquisire dimestichezza con gli strumenti DevTools di Chrome per eseguire il debug dello stato del service worker.

A questo scopo, aggiungi il seguente codice a service-worker.js, che registrerà messaggi alla console DevTools in risposta a vari eventi (ma non molto altro):

self.addEventListener('install', (event) => {
  console.log('Inside the install handler:', event);
});

self.addEventListener('activate', (event) => {
  console.log('Inside the activate handler:', event);
});

self.addEventListener(fetch, (event) => {
  console.log('Inside the fetch handler:', event);
});

Acquisisci familiarità con il riquadro Service worker in DevTools

Ora che hai aggiunto il codice a register-sw.js e service-worker.js file, è il momento di visitare la versione live del progetto di esempio e osservare il service worker in azione.

  • Per visualizzare l'anteprima del sito, premi Visualizza app. Quindi premi Schermo intero schermo intero.
  • Premi "Ctrl+Maiusc+J" (o "Comando+Opzione+J" su Mac) per aprire DevTools.
  • Fai clic sulla scheda Console.

Dovresti vedere qualcosa di simile ai seguenti messaggi di log, che mostra che il service worker è stato installato e attivato:

Mostra che il service worker è installato e attivato.

Quindi, vai alla scheda Applicazioni e seleziona il riquadro Service worker. Il risultato dovrebbe essere simile al seguente:

Mostra i dettagli dei service worker nel riquadro dei service worker.

Questo ti informa della presenza di un service worker con URL di origine service-worker.js, per l'app web solar-donkey.glitch.me, è attualmente sia attivato e in esecuzione. Ti dice anche che al momento è presente un client (scheda aperta) controllato dal service worker.

Puoi usare i link in questo riquadro, come Unregister o stop, per apportare modifiche al service worker attualmente registrato per scopi di debug.

Attiva il flusso di aggiornamento del service worker

Uno dei concetti chiave da capire quando si sviluppa con i service worker è l'idea di un flusso di aggiornamento.

Dopo che gli utenti visitano un'app web che registra un service worker, termineranno con il codice della copia attuale di service-worker.js installata sul suo browser locale. Ma cosa succede quando aggiorni la versione service-worker.js archiviato sul tuo server web?

Quando un visitatore abituale torna a un URL che rientra nell'ambito di un worker di servizio, il browser richiede automaticamente l'ultima service-worker.js e controlla se sono presenti modifiche. Se qualcosa nello script del service worker è diverso, il nuovo service worker avrà la possibilità di installare, attivare per poi assumere il controllo.

Puoi simulare questo flusso di aggiornamento tornando all'editor di codice del progetto e apportando qualsiasi modifica al codice. Una modifica rapida potrebbe essere sostituire

self.addEventListener('install', (event) => {
  console.log('Inside the install handler:', event);
});

con

self.addEventListener('install', (event) => {
  console.log('Inside the UPDATED install handler:', event);
});

Dopo aver apportato la modifica, torna alla versione live dell'app di esempio e ricarica la pagina con la scheda Applicazione DevTools ancora aperta. Dovresti vedere quanto segue:

Mostra due versioni del service worker installate.

Questo mostra che in questo cluster sono installate due versioni del service worker punto di accesso. La versione precedente, che era già attivata, è in esecuzione e in della pagina corrente. Viene elencata la versione aggiornata del service worker sotto. È nella waiting, e attenderà finché tutte le schede aperte controllate dal i vecchi Service worker sono chiusi.

Questo comportamento predefinito assicura che, se il nuovo il Service worker presenta una differenza fondamentale nel comportamento di quello precedente, ad esempio Gestore fetch che risponde con risorse incompatibili con le versioni precedenti delle tue app web, non avranno effetto finché un utente non avrà arrestato le istanze precedenti della tua app web.

Riepilogo

Ora dovresti avere familiarità con la procedura di registrazione di un worker di servizio e con l'osservazione del suo comportamento utilizzando DevTools di Chrome.

Ora sei in grado di iniziare a implementare strategie di memorizzazione nella cache e i componenti utili che aiuteranno la tua applicazione web a caricarsi in modo affidabile e affidabile rapidamente.