Lietuvių

Sužinokite, kaip naudoti „service workers“ kuriant neprisijungus veikiančias žiniatinklio programas, kurios yra greitos, patikimos ir patrauklios vartotojams visame pasaulyje.

Service Workers: Neprisijungus veikiančių (offline-first) žiniatinklio programų kūrimas

Šiuolaikiniame pasaulyje vartotojai tikisi, kad žiniatinklio programos bus greitos, patikimos ir prieinamos net tada, kai tinklo ryšys yra ribotas arba jo visai nėra. Būtent čia pradedama taikyti „neprisijungus veikiančios“ (offline-first) dizaino koncepcija. „Service workers“ yra galinga technologija, leidžianti kūrėjams kurti žiniatinklio programas, kurios sklandžiai veikia neprisijungus prie tinklo ir taip užtikrina geresnę vartotojo patirtį.

Kas yra „Service Workers“?

„Service worker“ yra JavaScript failas, kuris veikia fone, atskirai nuo pagrindinės naršyklės gijos. Jis veikia kaip tarpininkas (proxy) tarp žiniatinklio programos ir tinklo, perimdamas tinklo užklausas ir valdydamas podėliavimą (caching). „Service workers“ gali atlikti tokias užduotis kaip:

Svarbu tai, kad „service workers“ kontroliuoja naršyklė, o ne tinklalapis. Tai leidžia jiems veikti net tada, kai vartotojas uždarė skirtuką ar naršyklės langą.

Kodėl „Offline-First“?

Neprisijungus veikiančios žiniatinklio programos kūrimas suteikia daug privalumų:

Kaip veikia „Service Workers“

„Service worker“ gyvavimo ciklą sudaro keli etapai:

  1. Registracija: „Service worker“ yra užregistruojamas naršyklėje, nurodant programos aprėptį, kurią jis kontroliuos.
  2. Diegimas: „Service worker“ yra įdiegiamas. Šio etapo metu jis paprastai išsaugo statinius išteklius podėlyje.
  3. Aktyvavimas: „Service worker“ yra aktyvuojamas ir perima žiniatinklio programos kontrolę. Tai gali apimti senų „service workers“ išregistravimą ir senų podėlių išvalymą.
  4. Neaktyvus: „Service worker“ išlieka neaktyvus, laukdamas tinklo užklausų ar kitų įvykių.
  5. Gauti (Fetch): Kai pateikiama tinklo užklausa, „service worker“ ją perima ir gali pateikti turinį iš podėlio arba gauti išteklių iš tinklo.

„Offline-First“ diegimas su „Service Workers“: žingsnis po žingsnio vadovas

Štai pagrindinis pavyzdys, kaip įdiegti funkcionalumą neprisijungus naudojant „service workers“:

1 žingsnis: Užregistruokite „Service Worker“

Pagrindiniame JavaScript faile (pvz., `app.js`):


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/service-worker.js')
    .then(function(registration) {
      console.log('"Service Worker" užregistruotas su aprėptimi:', registration.scope);
    })
    .catch(function(error) {
      console.log('"Service Worker" registracija nepavyko:', error);
    });
}

Šis kodas patikrina, ar naršyklė palaiko „service workers“, ir užregistruoja `service-worker.js` failą. Aprėptis (scope) apibrėžia, kuriuos URL adresus kontroliuos „service worker“.

2 žingsnis: Sukurkite „Service Worker“ failą (service-worker.js)

Sukurkite failą pavadinimu `service-worker.js` su šiuo kodu:


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

self.addEventListener('install', function(event) {
  // Atlikite diegimo veiksmus
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Atidarytas podėlis');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Podėlio atitiktis - grąžinti atsakymą
        if (response) {
          return response;
        }

        // SVARBU: Klonuokite užklausą.
        // Užklausa yra srautas ir gali būti panaudota tik vieną kartą. Kadangi mes ją naudojame
        // vieną kartą podėliui ir vieną kartą naršyklei gauti duomenis (fetch), mums reikia klonuoti užklausą.
        var fetchRequest = event.request.clone();

        return fetch(fetchRequest).then(
          function(response) {
            // Patikrinkite, ar gavome galiojantį atsakymą
            if(!response || response.status !== 200 || response.type !== 'basic') {
              return response;
            }

            // SVARBU: Klonuokite atsakymą.
            // Atsakymas yra srautas ir jį reikia panaudoti tik vieną kartą.
            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);
          }
        })
      );
    })
  );
});

Šis kodas atlieka šiuos veiksmus:

3 žingsnis: Išbandykite savo funkcionalumą neprisijungus

Norėdami išbandyti savo funkcionalumą neprisijungus, galite naudoti naršyklės kūrėjo įrankius. „Chrome“ naršyklėje atidarykite „DevTools“, eikite į skirtuką „Application“ ir pasirinkite „Service Workers“. Tada galite imituoti neprisijungus režimą pažymėdami „Offline“ langelį.

Pažangesnės „Service Worker“ technikos

Kai jau turite pagrindinį „service workers“ supratimą, galite tyrinėti pažangesnes technikas, siekdami patobulinti savo „offline-first“ programą:

Podėliavimo strategijos

Yra keletas podėliavimo strategijų, kurias galite naudoti, priklausomai nuo ištekliaus tipo ir jūsų programos reikalavimų:

Tinkamos podėliavimo strategijos pasirinkimas priklauso nuo konkretaus ištekliaus ir jūsų programos reikalavimų. Pavyzdžiui, statinius išteklius, tokius kaip paveikslėliai ir CSS failai, dažnai geriausia pateikti naudojant „Cache First“ strategiją, o dinamiškam turiniui gali būti naudingesnė „Network First“ arba „Cache then Network“ strategija.

Fono sinchronizavimas

Fono sinchronizavimas leidžia atidėti užduotis, kol vartotojas turės stabilų tinklo ryšį. Tai naudinga tokioms užduotims kaip formų pateikimas ar failų įkėlimas. Pavyzdžiui, vartotojas atokioje Indonezijos vietovėje gali užpildyti formą būdamas neprisijungęs. „Service worker“ gali palaukti, kol atsiras ryšys, ir tik tada pateikti duomenis.

Tiesioginiai pranešimai (Push Notifications)

„Service workers“ gali būti naudojami siunčiant tiesioginius pranešimus vartotojams, net kai programa nėra atidaryta. Tai galima panaudoti siekiant iš naujo įtraukti vartotojus ir pateikti savalaikius atnaujinimus. Įsivaizduokite naujienų programą, kuri realiu laiku siunčia naujienų pranešimus vartotojams, nepriklausomai nuo to, ar programa aktyviai veikia.

Workbox

„Workbox“ yra JavaScript bibliotekų rinkinys, kuris palengvina „service workers“ kūrimą. Jis suteikia abstrakcijas įprastoms užduotims, tokioms kaip podėliavimas, maršruto parinkimas (routing) ir fono sinchronizavimas. Naudojant „Workbox“ galima supaprastinti „service worker“ kodą ir padaryti jį lengviau prižiūrimą. Daugelis įmonių dabar naudoja „Workbox“ kaip standartinį komponentą kuriant PWA ir „offline-first“ patirtis.

Aspektai, svarbūs pasaulinei auditorijai

Kuriant „offline-first“ žiniatinklio programas pasaulinei auditorijai, svarbu atsižvelgti į šiuos veiksnius:

„Offline-First“ programų pavyzdžiai

Keletas populiarių žiniatinklio programų sėkmingai įdiegė funkcionalumą neprisijungus naudojant „service workers“:

Išvada

„Service workers“ yra galingas įrankis kuriant greitas, patikimas ir įtraukiančias „offline-first“ žiniatinklio programas. Išsaugodami išteklius podėlyje, perimdami tinklo užklausas ir atlikdami fono užduotis, „service workers“ gali suteikti geresnę vartotojo patirtį net tada, kai tinklo ryšys yra ribotas arba jo visai nėra. Kadangi prieiga prie tinklo visame pasaulyje išlieka nevienoda, „offline-first“ dizaino principų taikymas yra labai svarbus siekiant užtikrinti vienodas galimybes gauti informaciją ir paslaugas internete.

Vadovaudamiesi šiame vadove pateiktais žingsniais ir atsižvelgdami į minėtus veiksnius, galite kurti žiniatinklio programas, kurios sklandžiai veikia neprisijungus ir suteikia malonią patirtį vartotojams visame pasaulyje. Pasinaudokite „service workers“ galia ir kurkite ateities internetą – ateitį, kurioje internetas prieinamas visiems, visur, nepriklausomai nuo jų tinklo ryšio.

Service Workers: Neprisijungus veikiančių (offline-first) žiniatinklio programų kūrimas | MLOG