Suomi

Opi käyttämään service workereita luodaksesi offline-first-verkkosovelluksia, jotka ovat nopeita, luotettavia ja mukaansatempaavia käyttäjille maailmanlaajuisesti.

Service Workerit: Offline-first-verkkosovellusten rakentaminen

Nykymaailmassa käyttäjät odottavat verkkosovellusten olevan nopeita, luotettavia ja saavutettavissa, vaikka verkkoyhteys olisi rajoitettu tai poissa käytöstä. Tässä kohtaa "offline-first"-suunnittelun konsepti astuu kuvaan. Service workerit ovat tehokas teknologia, joka mahdollistaa kehittäjille verkkosovellusten rakentamisen, jotka toimivat saumattomasti offline-tilassa, tarjoten ylivertaisen käyttäjäkokemuksen.

Mitä ovat service workerit?

Service worker on JavaScript-tiedosto, joka suoritetaan taustalla, erillään selaimen pääsäikeestä. Se toimii välityspalvelimena verkkosovelluksen ja verkon välillä, siepaten verkkopyyntöjä ja hallinnoiden välimuistia. Service workerit voivat hoitaa tehtäviä, kuten:

Tärkeää on, että service workereita hallitsee selain, ei verkkosivu. Tämä mahdollistaa niiden toiminnan silloinkin, kun käyttäjä on sulkenut välilehden tai selainikkunan.

Miksi Offline-First?

Offline-first-verkkosovelluksen rakentaminen tarjoaa lukuisia etuja:

Miten service workerit toimivat

Service workerin elinkaari koostuu useista vaiheista:

  1. Rekisteröinti: Service worker rekisteröidään selaimelle, määrittäen sovelluksen laajuuden, jota se hallitsee.
  2. Asennus: Service worker asennetaan, ja tämän aikana se tyypillisesti tallentaa staattiset resurssit välimuistiin.
  3. Aktivointi: Service worker aktivoidaan ja se ottaa verkkosovelluksen hallintaansa. Tämä voi sisältää vanhojen service workereiden rekisteröinnin poistamisen ja vanhojen välimuistien siivoamisen.
  4. Lepotila: Service worker pysyy lepotilassa odottaen verkkopyyntöjä tai muita tapahtumia.
  5. Nouto (Fetch): Kun verkkopyyntö tehdään, service worker sieppaa sen ja voi joko tarjota välimuistiin tallennetun sisällön tai noutaa resurssin verkosta.

Offline-first-toiminnallisuuden toteuttaminen service workereilla: Vaiheittainen opas

Tässä on perusesimerkki siitä, kuinka offline-first-toiminnallisuus toteutetaan service workereiden avulla:

Vaihe 1: Rekisteröi service worker

Pääasiallisessa JavaScript-tiedostossasi (esim. `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('Service Worker rekisteröity skoopilla:', registration.scope);
    })
    .catch(function(error) {
      console.log('Service Workerin rekisteröinti epäonnistui:', error);
    });
}

Tämä koodi tarkistaa, tukeeko selain service workereita, ja rekisteröi `service-worker.js`-tiedoston. Skooppi (scope) määrittää, mitä URL-osoitteita service worker hallitsee.

Vaihe 2: Luo service worker -tiedosto (service-worker.js)

Luo tiedosto nimeltä `service-worker.js` seuraavalla koodilla:


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

self.addEventListener('install', function(event) {
  // Suorita asennusvaiheet
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Välimuisti avattu');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Välimuistiosuma - palauta vastaus
        if (response) {
          return response;
        }

        // TÄRKEÄÄ: Kloonaa pyyntö.
        // Pyyntö on virta (stream) ja se voidaan kuluttaa vain kerran. Koska kulutamme tämän
        // kerran välimuistia varten ja kerran selaimen noutoa varten, meidän on kloonattava vastaus.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Tarkista, saimmeko kelvollisen vastauksen
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // TÄRKEÄÄ: Kloonaa vastaus.
            // Vastaus on virta (stream) ja se täytyy kuluttaa vain kerran.
            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);
          }
        })
      );
    })
  );
});

Tämä koodi tekee seuraavaa:

Vaihe 3: Testaa offline-toiminnallisuutesi

Voit testata offline-toiminnallisuuttasi selaimen kehittäjätyökaluilla. Chromessa avaa DevTools, siirry "Application"-välilehdelle ja valitse "Service Workers". Voit sitten simuloida offline-tilaa valitsemalla "Offline"-valintaruudun.

Edistyneet service worker -tekniikat

Kun sinulla on perusymmärrys service workereista, voit tutkia edistyneempiä tekniikoita parantaaksesi offline-first-sovellustasi:

Välimuististrategiat

On olemassa useita välimuististrategioita, joita voit käyttää resurssin tyypistä ja sovelluksesi vaatimuksista riippuen:

Oikean välimuististrategian valinta riippuu tietystä resurssista ja sovelluksesi vaatimuksista. Esimerkiksi staattiset resurssit, kuten kuvat ja CSS-tiedostot, on usein parasta tarjota "Välimuisti ensin" -strategialla, kun taas dynaaminen sisältö saattaa hyötyä "Verkko ensin" tai "Välimuisti, sitten verkko" -strategiasta.

Taustasynkronointi

Taustasynkronointi mahdollistaa tehtävien lykkäämisen, kunnes käyttäjällä on vakaa verkkoyhteys. Tämä on hyödyllistä tehtävissä, kuten lomakkeiden lähettämisessä tai tiedostojen lataamisessa. Esimerkiksi käyttäjä Indonesian syrjäisellä alueella voi täyttää lomakkeen ollessaan offline-tilassa. Service worker voi sitten odottaa, kunnes yhteys on saatavilla, ennen kuin lähettää tiedot.

Push-ilmoitukset

Service workereita voidaan käyttää push-ilmoitusten lähettämiseen käyttäjille, vaikka sovellus ei olisikaan auki. Tätä voidaan käyttää käyttäjien uudelleen sitouttamiseen ja ajankohtaisten päivitysten tarjoamiseen. Ajatellaanpa uutissovellusta, joka tarjoaa tuoreimmat uutishälytykset käyttäjille reaaliajassa riippumatta siitä, onko sovellus aktiivisesti käynnissä.

Workbox

Workbox on kokoelma JavaScript-kirjastoja, jotka helpottavat service workereiden rakentamista. Se tarjoaa abstraktioita yleisille tehtäville, kuten välimuistin hallinnalle, reititykselle ja taustasynkronoinnille. Workboxin käyttäminen voi yksinkertaistaa service worker -koodiasi ja tehdä siitä helpommin ylläpidettävän. Monet yritykset käyttävät nyt Workboxia vakio-osana kehittäessään PWA-sovelluksia ja offline-first-kokemuksia.

Huomioita globaaleille yleisöille

Kun rakennetaan offline-first-verkkosovelluksia globaalille yleisölle, on tärkeää ottaa huomioon seuraavat tekijät:

Esimerkkejä offline-first-sovelluksista

Useat suositut verkkosovellukset ovat onnistuneesti toteuttaneet offline-first-toiminnallisuuden service workereiden avulla:

Yhteenveto

Service workerit ovat tehokas työkalu nopeiden, luotettavien ja mukaansatempaavien offline-first-verkkosovellusten rakentamiseen. Tallentamalla resursseja välimuistiin, sieppaamalla verkkopyyntöjä ja hoitamalla taustatehtäviä, service workerit voivat tarjota ylivertaisen käyttäjäkokemuksen, vaikka verkkoyhteys olisi rajoitettu tai poissa käytöstä. Koska verkkoyhteyksien saatavuus on edelleen epäjohdonmukaista eri puolilla maailmaa, offline-first-suunnitteluun keskittyminen on ratkaisevan tärkeää tiedon ja palveluiden tasapuolisen saatavuuden varmistamiseksi verkossa.

Noudattamalla tässä oppaassa esitettyjä vaiheita ja ottamalla huomioon edellä mainitut tekijät voit luoda verkkosovelluksia, jotka toimivat saumattomasti offline-tilassa ja tarjoavat ihastuttavan kokemuksen käyttäjille maailmanlaajuisesti. Hyödynnä service workereiden voima ja rakenna verkon tulevaisuutta – tulevaisuutta, jossa verkko on kaikkien saatavilla, kaikkialla, heidän verkkoyhteydestään riippumatta.