Italiano

Impara come usare i service worker per creare applicazioni web offline-first che siano veloci, affidabili e coinvolgenti per gli utenti di tutto il mondo.

Service Worker: Creare Applicazioni Web Offline-First

Nel mondo di oggi, gli utenti si aspettano che le applicazioni web siano veloci, affidabili e accessibili, anche quando la connettività di rete è limitata o non disponibile. È qui che entra in gioco il concetto di design "offline-first". I service worker sono una potente tecnologia che consente agli sviluppatori di creare applicazioni web che funzionano perfettamente offline, offrendo un'esperienza utente superiore.

Cosa sono i Service Worker?

Un service worker è un file JavaScript che viene eseguito in background, separato dal thread principale del browser. Agisce come un proxy tra l'applicazione web e la rete, intercettando le richieste di rete e gestendo la cache. I service worker possono gestire attività come:

È importante sottolineare che i service worker sono controllati dal browser, non dalla pagina web. Questo permette loro di funzionare anche quando l'utente ha chiuso la scheda o la finestra del browser.

Perché Offline-First?

Creare un'applicazione web offline-first offre numerosi vantaggi:

Come funzionano i Service Worker

Il ciclo di vita di un service worker consiste in diverse fasi:

  1. Registrazione: Il service worker viene registrato con il browser, specificando lo scope dell'applicazione che controllerà.
  2. Installazione: Il service worker viene installato, fase durante la quale tipicamente mette in cache gli asset statici.
  3. Attivazione: Il service worker viene attivato e assume il controllo dell'applicazione web. Questo può comportare la deregistrazione di vecchi service worker e la pulizia delle vecchie cache.
  4. Inattivo (Idle): Il service worker rimane inattivo, in attesa di richieste di rete o altri eventi.
  5. Fetch: Quando viene effettuata una richiesta di rete, il service worker la intercetta e può servire contenuti dalla cache o recuperare la risorsa dalla rete.

Implementare l'Offline-First con i Service Worker: Una Guida Passo-Passo

Ecco un esempio di base su come implementare la funzionalità offline-first utilizzando i service worker:

Passo 1: Registrare il Service Worker

Nel tuo file JavaScript principale (es. `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('Service Worker registrato con scope:', registration.scope);
    })
    .catch(function(error) {
      console.log('Registrazione del Service Worker fallita:', error);
    });
}

Questo codice controlla se il browser supporta i service worker e registra il file `service-worker.js`. Lo scope definisce quali URL il service worker controllerà.

Passo 2: Creare il File del Service Worker (service-worker.js)

Crea un file chiamato `service-worker.js` con il seguente codice:


const CACHE_NAME = 'my-site-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/app.js',
  '/images/logo.png'
];

self.addEventListener('install', function(event) {
  // Esegui i passaggi di installazione
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Cache aperta');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Corrispondenza trovata nella cache - restituisci la risposta
        if (response) {
          return response;
        }

        // IMPORTANTE: Clona la richiesta.
        // Una richiesta è uno stream e può essere consumata solo una volta. Poiché la stiamo consumando
        // una volta dalla cache e una volta dal browser per il fetch, dobbiamo clonare la risposta.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Controlla se abbiamo ricevuto una risposta valida
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // IMPORTANTE: Clona la risposta.
            // Una risposta è uno stream e deve essere consumata solo una volta.
            var responseToCache = response.clone();

            caches.open(CACHE_NAME)
              .then(function(cache) {
                cache.put(event.request, responseToCache);
              });

            return response;
          }
        );
      })
    );
});

self.addEventListener('activate', function(event) {

  var cacheWhitelist = [CACHE_NAME];

  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.map(function(cacheName) {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

Questo codice fa quanto segue:

Passo 3: Testare la Funzionalità Offline

Per testare la tua funzionalità offline, puoi usare gli strumenti per sviluppatori del browser. In Chrome, apri i DevTools, vai alla scheda "Application" e seleziona "Service Workers". Puoi quindi simulare la modalità offline spuntando la casella "Offline".

Tecniche Avanzate di Service Worker

Una volta che hai una comprensione di base dei service worker, puoi esplorare tecniche più avanzate per migliorare la tua applicazione offline-first:

Strategie di Caching

Ci sono diverse strategie di caching che puoi usare, a seconda del tipo di risorsa e dei requisiti della tua applicazione:

La scelta della giusta strategia di caching dipende dalla risorsa specifica e dai requisiti della tua applicazione. Ad esempio, gli asset statici come immagini e file CSS sono spesso serviti al meglio usando la strategia Cache First, mentre i contenuti dinamici potrebbero beneficiare della strategia Network First o Cache then Network.

Sincronizzazione in Background

La sincronizzazione in background ti permette di posticipare le attività finché l'utente non ha una connessione di rete stabile. Questo è utile per attività come l'invio di moduli o il caricamento di file. Ad esempio, un utente in un'area remota dell'Indonesia potrebbe compilare un modulo mentre è offline. Il service worker può quindi attendere che una connessione sia disponibile prima di inviare i dati.

Notifiche Push

I service worker possono essere utilizzati per inviare notifiche push agli utenti, anche quando l'applicazione non è aperta. Questo può essere usato per coinvolgere nuovamente gli utenti e fornire aggiornamenti tempestivi. Pensa a un'applicazione di notizie che fornisce avvisi di ultime notizie agli utenti in tempo reale, indipendentemente dal fatto che l'app sia attivamente in esecuzione.

Workbox

Workbox è una raccolta di librerie JavaScript che semplifica la creazione di service worker. Fornisce astrazioni per compiti comuni come il caching, il routing e la sincronizzazione in background. L'uso di Workbox può semplificare il codice del tuo service worker e renderlo più manutenibile. Molte aziende ora usano Workbox come componente standard nello sviluppo di PWA ed esperienze offline-first.

Considerazioni per un Pubblico Globale

Quando si creano applicazioni web offline-first per un pubblico globale, è importante considerare i seguenti fattori:

Esempi di Applicazioni Offline-First

Diverse applicazioni web popolari hanno implementato con successo la funzionalità offline-first utilizzando i service worker:

Conclusione

I service worker sono uno strumento potente per creare applicazioni web offline-first che sono veloci, affidabili e coinvolgenti. Mettendo in cache gli asset, intercettando le richieste di rete e gestendo le attività in background, i service worker possono fornire un'esperienza utente superiore, even when network connectivity is limited or unavailable. Poiché l'accesso alla rete rimane discontinuo in tutto il mondo, concentrarsi su design offline-first è cruciale per garantire un accesso equo alle informazioni e ai servizi sul web.

Seguendo i passaggi descritti in questa guida e considerando i fattori sopra menzionati, puoi creare applicazioni web che funzionano perfettamente offline e offrono un'esperienza piacevole agli utenti di tutto il mondo. Abbraccia il potere dei service worker e costruisci il futuro del web – un futuro in cui il web è accessibile a tutti, ovunque, indipendentemente dalla loro connessione di rete.

Service Worker: Creare Applicazioni Web Offline-First | MLOG