Wikipedysta:Dawid-WS/Service workers


Wikipedysta:Dawid-WS/Service workers w encyklopedii

Z Wikipedii, wolnej encyklopedii Przejdź do nawigacji Przejdź do wyszukiwania

Service workers – mechanizm, który został wprowadzony do najnowszych przeglądarek internetowych definiując sposób w jaki powinna zachować się aplikacja w przypadku utraty połączenia z Internetem. Pierwszym tego typu rozwiązaniem problemu z dostępem offline do aplikacji internetowych, był AppCache. Service Workers to skrypt napisany w JavaScript, który daje możliwość pełnej kontroli nad pobieraniem wszystkich zasobów z domeny. Skrypt od początku publikacji wspierany jest domyślnie przez przeglądarki Chrome. Włączany jest oddzielnie od głównego wątku przeglądarki internetowej, tak aby umożliwić: obsługę powiadomień w trybie „push(ang.)”, natychmiastową synchronizację danych w tle, zachowanie pomięci podręcznej oraz buforowanie jej. Dodatkowo wpływa na odbieranie scentralizowanych aktualizacji.

Skrypt Service Workers wykorzystywany jest do zapewnienia progresywnym aplikacjom webowym wysokiej wydajności i dobrej współpracy z natywnymi aplikacjami mobilnymi przy niewielkim zużyciu miejsca na dysku, aktualizacji w czasie rzeczywistym oraz przy zdecydowanie lepszej widoczności tradycyjnych aplikacji sieciowych w wyszukiwarkach internetowych.

Spis treści

Cykl życia Service Workers | edytuj kod

Cykl życia Service Workers jest właściwie jego najbardziej skomplikowaną częścią. Jeśli developer dobrze zaplanuje działania, może dostarczać użytkownikom niezauważalne aktualizacje.

Jeśli zdefiniuje mu ścieżkę na /sw.js, to wszystkie akcje Service Worker wykonywane są w ramach zdarzeń (eventów): install, activate, fetch. tzn. w pliku /sw.js).

Oto przykładowy kod:

// Zdarzenie wywoływane jest po zarejestrowaniu Service Workera }); self.addEventListener('activate', function(ev) { // Zdarzenie, które wywołamy po aktualizacji pliku Service Workera }); self.addEventListener('fetch', function(ev) { // Zdarzenie wywoływane podczas próby pobrania zasobu }); 
  • Zdarzenie instalacji jest pierwszym eventem, które otrzymuje Service Workers i ma miejsce tylko raz – na samym początku.
  • Polecenie przekazane do installEvent.waitUntil() definiuje czas trwania i status instalacji.
  • Mechanizm nie odbierze żadnych zdarzeń, dopóki nie zakończy pomyślnie instalacji i nie stanie się aktywny.
  • Domyślnie, strona nie przejdzie przez skrypt, chyba że samo jej żądanie przeszło przez ten proces. Należy więc odświeżyć stronę, aby zobaczyć efekty działania Service Workera.

Zazwyczaj w zdarzeniu „install” wypełniamy pamięć podręczną jakimiś podstawowymi i początkowymi danymi. Kolejno w evencie „active”, najważniejsze są wszelkie możliwe zmiany w pamięci podręcznej (przykładowo zostaje z niego wyrzucony jeden z zasobów), a zdarzenie fetch wywołane jest za każdym razem, gdy pobierane są jakieś zasoby. Ostatnie zdarzenie wywołane jest przy każdej próbie pobrania zasobu, więc to nie ma znaczenia, czy aplikacja jest obecnie offline czy on-line.

Podczas pierwszej wizyty | edytuj kod

Podczas pierwszej wizyty użytkownika na stronie internetowej, przeglądarka nie ma zainstalowanego Service Workera – nie może tego wykonać z wyprzedzeniem. Zadaniem developera jest takie zdefiniowanie startu Service Workera, aby priorytetowo trafił do przeglądarki użytkownika oraz zawierał minimalny zestaw informacji potrzebnych do wyświetlenia interaktywnej strony. Wszelkie zasoby strony, które powodują spowolnienia w pobieraniu tych odpowiedzi, są traktowane jako niesprzyjające szybkiej implementacji aplikacji.

Rozwiązanie polega na kontrolowaniu startu Service Workera poprzez wybranie momentu wywołania pliku navigator.serviceWorker.register(). Prostą zasadą jest opóźnienie rejestracji do momentu, gdy w oknie pojawi się zdarzenie obciążenia za pomocą kodu:

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

Jeśli dowolna aplikacja korzysta z platformy programistycznej, która wykonuje dodatkowe czynności po załadowaniu strony, warto znaleźć zdarzenie specyficznego dla tego frameworka, która sygnalizuje, kiedy te czynności zostaną wykonane. Programista powinien ustalić najkorzystniejszy moment do uruchomienia Service Workera w tle, tak aby zbyt wiele czynności wykonywanych na stronie nie spowalniało jej.

Podczas kolejnej wizyty nie ma znaczenia, kiedy wywołany zostanie navigator.serviceWorker.register() oraz czy w ogóle to nastąpi. Jeśli nie zmieni się adresu URL Service Workera, rejestracja nie będzie działać podczas kolejnych wizyt – ponieważ skrypt został już zarejestrowany wcześniej.

Bezpieczeństwo | edytuj kod

Service workers udostępniając ogromne możliwości ingerencji w aplikację, jednocześnie łączy się z ogromnym ryzykiem ataku man-in-the-middle w przypadku udostępniania go poprzez mniej bezpieczny protokół HTTP. Istnieje jednak wyjątek – w przypadku localhost nie występuje podobne utrudnienie, co daje nam możliwość przeprowadzanie testów.

Można też przedsięwziąć dodatkowe działania, takie jak np. modyfikacja konfiguracji serwera, która polega na odrzucaniu wszelkich żądań, w których nagłówek to „Service-Worker: script”.

Bibliografia | edytuj kod

Kategoria:Przeglądarki internetowe

Na podstawie artykułu: "Wikipedysta:Dawid-WS/Service workers" pochodzącego z Wikipedii
OryginałEdytujHistoria i autorzy