Overzicht servicemedewerkers

Servicemedewerkers bieden ongelooflijk veel nut, maar kunnen in het begin lastig zijn om mee te werken. Workbox maakt servicemedewerkers gebruiksvriendelijker. Omdat servicemedewerkers echter moeilijke problemen oplossen, zal elke abstractie van die technologie ook lastig zijn zonder deze te begrijpen. Deze eerste paar stukjes documentatie zullen dus die onderliggende technologie behandelen voordat we ingaan op de details van Workbox.

Als u een lijst met servicemedewerkers wilt bekijken, typt u chrome://serviceworker-internals/ in uw adresbalk.

Een lopende lijst van servicemedewerkers.

Wat bieden servicemedewerkers?

Servicemedewerkers zijn gespecialiseerde JavaScript-middelen die fungeren als proxy's tussen webbrowsers en webservers. Ze zijn bedoeld om de betrouwbaarheid te verbeteren door offline toegang te bieden en de paginaprestaties te verbeteren.

Een geleidelijk verbeterende, app-achtige levenscyclus

Servicemedewerkers zijn een aanvulling op bestaande websites. Dit betekent dat als gebruikers in browsers die geen servicemedewerkers ondersteunen, websites bezoeken die hiervan gebruikmaken, er geen basisfunctionaliteit wordt verbroken. Dat is waar het internet om draait.

Servicemedewerkers verbeteren websites geleidelijk gedurende een levenscyclus die vergelijkbaar is met platformspecifieke applicaties. Bedenk wat er gebeurt als een native app wordt geïnstalleerd vanuit een app store:

  • Er wordt gevraagd om de applicatie te downloaden.
  • De app wordt gedownload en geïnstalleerd.
  • De app is klaar voor gebruik en kan worden gestart.
  • De app-updates voor nieuwe releases.

De levenscyclus van servicemedewerkers is vergelijkbaar, maar met een progressieve verbeteringsaanpak. Bij het allereerste bezoek aan een webpagina waarop een nieuwe servicemedewerker wordt geïnstalleerd, biedt het eerste bezoek aan een pagina de basisfunctionaliteit terwijl de servicemedewerker downloadt. Nadat een servicemedewerker is geïnstalleerd en geactiveerd, controleert deze de pagina om verbeterde betrouwbaarheid en snelheid te bieden.

Toegang tot een JavaScript-gestuurde caching-API

Een onmisbaar aspect van servicemedewerkertechnologie is de Cache interface , een cachingmechanisme dat volledig gescheiden is van de HTTP-cache. De Cache interface is toegankelijk binnen het bereik van de servicemedewerker en binnen het bereik van de hoofdthread. Dit opent talloze mogelijkheden voor gebruikersgestuurde interacties met een Cache instantie.

Terwijl de HTTP-cache wordt beïnvloed door caching-instructies die zijn gespecificeerd in HTTP-headers, is de Cache interface programmeerbaar via Javascript. Dit betekent dat caching-reacties op netwerkverzoeken kunnen worden gebaseerd op de logica die het beste is voor een bepaalde website. Bijvoorbeeld:

  • Sla statische assets op in de cache bij het eerste verzoek daartoe, en serveer ze bij elk volgend verzoek alleen vanuit de cache.
  • Bewaar pagina-opmaak in de cache, maar geef alleen opmaak uit de cache weer in offline scenario's.
  • Geef verouderde reacties weer voor bepaalde assets uit de cache, maar update deze vanaf het netwerk op de achtergrond.
  • Stream gedeeltelijke inhoud vanaf het netwerk en assembleer deze met een app-shell uit de cache om de perceptuele prestaties te verbeteren.

Elk van deze is een voorbeeld van een cachingstrategie . Cachingstrategieën maken offline ervaringen mogelijk en kunnen betere prestaties leveren door hervalidatiecontroles met hoge latentie te omzeilen, zodat de HTTP-cache op gang komt. Voordat we in Workbox duiken, zullen er een aantal cachingstrategieën en code worden besproken die ervoor zorgen dat ze werken.

Een asynchrone en gebeurtenisgestuurde API

Het overbrengen van gegevens via het netwerk is inherent asynchroon. Het kost tijd om een ​​asset aan te vragen, voordat een server op dat verzoek reageert en voordat het antwoord wordt gedownload. De tijd die ermee gemoeid is, is gevarieerd en onbepaald. Servicemedewerkers vangen deze asynchroniciteit op via een gebeurtenisgestuurde API, waarbij gebruik wordt gemaakt van callbacks voor gebeurtenissen zoals:

Gebeurtenissen kunnen worden geregistreerd met behulp van een bekende addEventListener API . Al deze gebeurtenissen kunnen mogelijk interageren met de Cache interface. Vooral de mogelijkheid om terug te bellen wanneer netwerkverzoeken worden verzonden, is van cruciaal belang voor het bieden van de gewenste betrouwbaarheid en snelheid.

Bij asynchroon werk in JavaScript wordt gebruik gemaakt van beloften . Omdat beloften ook ten grondslag liggen aan async en await , kunnen deze JavaScript-functies ook worden gebruikt om de code voor servicemedewerkers (en Workbox!) te vereenvoudigen voor een betere ontwikkelaarservaring.

Precaching en runtime-caching

De interactie tussen een servicemedewerker en een Cache instantie omvat twee verschillende caching-concepten: precaching en runtime-caching. Elk van deze factoren staat centraal in de voordelen die een servicemedewerker kan bieden.

Precaching is het proces waarbij assets vooraf in de cache worden opgeslagen, meestal tijdens de installatie van een servicemedewerker. Met precaching kunnen belangrijke statische assets en materialen die nodig zijn voor offline toegang worden gedownload en opgeslagen in een Cache instantie. Dit soort caching verbetert ook de paginasnelheid naar volgende pagina's waarvoor de vooraf in de cache opgeslagen elementen nodig zijn.

Bij runtime-caching wordt een caching-strategie toegepast op assets die tijdens runtime vanuit het netwerk worden opgevraagd. Dit soort caching is nuttig omdat het offline toegang garandeert tot pagina's en items die de gebruiker al heeft bezocht.

Gecombineerd bieden deze benaderingen voor het gebruik van de Cache interface in een servicemedewerker een enorm voordeel voor de gebruikerservaring en zorgen ze voor app-achtig gedrag op anders gewone webpagina's.

Isolatie van de hoofddraad

De staat van JavaScript-prestaties is een steeds veranderende uitdaging voor het web, en vanuit gebruikersperspectief hangt deze af van de mogelijkheden van apparaten en toegang tot snel internet. Hoe meer JavaScript wordt gebruikt, hoe uitdagender het wordt om snelle websites te bouwen die geweldige gebruikerservaringen bieden.

Servicemedewerkers zijn als webwerkers in die zin dat al het werk dat ze doen op hun eigen threads plaatsvindt. Dit betekent dat de taken van servicemedewerkers niet om aandacht strijden met andere taken in de hoofdlijn. Bij servicemedewerkers staat de gebruiker centraal!

De weg voor ons

Deze documentatie is slechts een overzicht. Er zijn nog een paar onderwerpen die we over servicemedewerkers moeten bespreken voordat we Workbox zelf behandelen, maar wees gerust: met een goed begrip van servicemedewerkers zal het gebruik van Workbox een eenvoudiger en productievere ervaring zijn.