Dansk

Lær, hvordan du bruger service workers til at skabe offline-først webapplikationer, der er hurtige, pålidelige og engagerende for brugere over hele verden.

Service Workers: Byg offline-først webapplikationer

I nutidens verden forventer brugere, at webapplikationer er hurtige, pålidelige og tilgængelige, selv når netværksforbindelsen er begrænset eller utilgængelig. Det er her, konceptet "offline-først" design kommer ind i billedet. Service workers er en kraftfuld teknologi, der giver udviklere mulighed for at bygge webapplikationer, der fungerer problemfrit offline, og som giver en overlegen brugeroplevelse.

Hvad er Service Workers?

En service worker er en JavaScript-fil, der kører i baggrunden, adskilt fra browserens hovedtråd. Den fungerer som en proxy mellem webapplikationen og netværket, hvor den opsnapper netværksanmodninger og administrerer caching. Service workers kan håndtere opgaver som:

Vigtigt er, at service workers styres af browseren, ikke af websiden. Dette giver dem mulighed for at fungere, selv når brugeren har lukket fanen eller browservinduet.

Hvorfor offline-først?

At bygge en offline-først webapplikation giver talrige fordele:

Hvordan Service Workers fungerer

En service workers livscyklus består af flere stadier:

  1. Registrering: Service workeren registreres i browseren, hvor omfanget af den applikation, den skal kontrollere, specificeres.
  2. Installation: Service workeren installeres, hvor den typisk cacher statiske aktiver.
  3. Aktivering: Service workeren aktiveres og overtager kontrollen over webapplikationen. Dette kan involvere afregistrering af gamle service workers og oprydning i gamle caches.
  4. Inaktiv: Service workeren forbliver inaktiv og venter på netværksanmodninger eller andre hændelser.
  5. Fetch: Når en netværksanmodning foretages, opsnapper service workeren den og kan enten servere cachelagret indhold eller hente ressourcen fra netværket.

Implementering af offline-først med Service Workers: En trin-for-trin guide

Her er et grundlæggende eksempel på, hvordan man implementerer offline-først funktionalitet ved hjælp af service workers:

Trin 1: Registrer Service Worker

I din primære JavaScript-fil (f.eks. `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('Service Worker registreret med scope:', registration.scope);
    })
    .catch(function(error) {
      console.log('Service Worker-registrering mislykkedes:', error);
    });
}

Denne kode kontrollerer, om browseren understøtter service workers, og registrerer filen `service-worker.js`. Omfanget definerer, hvilke URL'er service workeren vil kontrollere.

Trin 2: Opret Service Worker-filen (service-worker.js)

Opret en fil ved navn `service-worker.js` med følgende kode:


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

self.addEventListener('install', function(event) {
  // Udfør installationstrin
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Cache åbnet');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Cache-træf - returner svar
        if (response) {
          return response;
        }

        // VIGTIGT: Klon anmodningen.
        // En anmodning er en stream og kan kun forbruges én gang. Da vi forbruger denne
        // én gang af cachen og én gang af browseren til fetch, er vi nødt til at klone svaret.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Tjek om vi har modtaget et gyldigt svar
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // VIGTIGT: Klon svaret.
            // Et svar er en stream og skal kun forbruges én gang.
            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);
          }
        })
      );
    })
  );
});

Denne kode gør følgende:

Trin 3: Test din offline-funktionalitet

For at teste din offline-funktionalitet kan du bruge browserens udviklingsværktøjer. I Chrome skal du åbne DevTools, gå til fanen "Application" og vælge "Service Workers." Du kan derefter simulere offline-tilstand ved at markere afkrydsningsfeltet "Offline".

Avancerede Service Worker-teknikker

Når du har en grundlæggende forståelse af service workers, kan du udforske mere avancerede teknikker for at forbedre din offline-først applikation:

Caching-strategier

Der er flere caching-strategier, du kan bruge, afhængigt af ressourcetypen og din applikations krav:

Valget af den rette caching-strategi afhænger af den specifikke ressource og din applikations krav. For eksempel serveres statiske aktiver som billeder og CSS-filer ofte bedst ved hjælp af Cache først-strategien, mens dynamisk indhold kan have gavn af Netværk først- eller Cache og derefter netværk-strategien.

Baggrundssynkronisering

Baggrundssynkronisering giver dig mulighed for at udskyde opgaver, indtil brugeren har en stabil netværksforbindelse. Dette er nyttigt for opgaver som at indsende formularer eller uploade filer. For eksempel kan en bruger i et fjerntliggende område i Indonesien udfylde en formular, mens vedkommende er offline. Service workeren kan derefter vente, indtil en forbindelse er tilgængelig, før dataene indsendes.

Push-notifikationer

Service workers kan bruges til at sende push-notifikationer til brugere, selv når applikationen ikke er åben. Dette kan bruges til at genengagere brugere og levere rettidige opdateringer. Overvej en nyhedsapplikation, der sender breaking news-advarsler til brugere i realtid, uanset om appen kører aktivt.

Workbox

Workbox er en samling af JavaScript-biblioteker, der gør det lettere at bygge service workers. Det giver abstraktioner for almindelige opgaver som caching, routing og baggrundssynkronisering. Brug af Workbox kan forenkle din service worker-kode og gøre den mere vedligeholdelsesvenlig. Mange virksomheder bruger nu Workbox som en standardkomponent, når de udvikler PWA'er og offline-først-oplevelser.

Overvejelser for et globalt publikum

Når man bygger offline-først webapplikationer til et globalt publikum, er det vigtigt at overveje følgende faktorer:

Eksempler på offline-først applikationer

Flere populære webapplikationer har med succes implementeret offline-først funktionalitet ved hjælp af service workers:

Konklusion

Service workers er et kraftfuldt værktøj til at bygge offline-først webapplikationer, der er hurtige, pålidelige og engagerende. Ved at cache aktiver, opsnappe netværksanmodninger og håndtere baggrundsopgaver kan service workers levere en overlegen brugeroplevelse, selv når netværksforbindelsen er begrænset eller utilgængelig. Da netværksadgang fortsat er ustabil over hele kloden, er fokus på offline-først design afgørende for at sikre lige adgang til information og tjenester på nettet.

Ved at følge de trin, der er beskrevet i denne guide, og overveje de nævnte faktorer, kan du skabe webapplikationer, der fungerer problemfrit offline og giver en fremragende oplevelse for brugere over hele verden. Omfavn kraften i service workers og byg fremtidens web – en fremtid, hvor nettet er tilgængeligt for alle, overalt, uanset deres netværksforbindelse.

Service Workers: Byg offline-først webapplikationer | MLOG