IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Un service worker és un script que s'executa en segon terme separat de la pàgina web que registra el service worker. Un Service Worker respon a esdeveniments (programació asíncrona) com per exemple (entre altres) peticions de xarxa (normalment peticions HTTP) de la pagina que ha registrat el service worker.

Per tant és un servei que es manté en execució latent i s'executa només quan es necessita pel fet d'haver succeït algun esdeveniment relacionat. Per exemple s'utilitzen sovint conjuntament amb Cache API per tal de realitzar cache dels recursos que utilitza una pàgina web i poder proporcionar offline experience.

També es poden utilitzar per augmentar el rendiment fent cache del que s'anomena application shell

Diferències entre Service Workers, Web Workers i Web Sockets

Llegiu Diferències entre Service Workers, Web Workers i Web Sockets per entendre les diferències entre aquestes tecnologies.

Suport en navegadors

Vegeu:

https://jakearchibald.github.io/isserviceworkerready/
http://caniuse.com/#feat=serviceworkers

Cache

Cal tenir en compte que històricament la primera API per a treballar amb Cache a Javascript/Navegadors va ser AppCache però cada cop s'utilitza menys (i ha estat molt criticada pels seus errors de disseny [1]). Amb l'aparició de ServiceWorker (intro) es solucionen aquestes limitacions (tot i que també es complica força l'API tot i que a canvi de tenir el màxim de control i flexibilitat per al desenvolupador.

Els exemples utilitzats en aquest apartat utilitzant l'API de cache. Vegeu l'articleCache API.


Recursos:


sw-precache

https://github.com/GoogleChromeLabs/sw-precache

Offline Support

We live in a disconnected & battery powered world, but our technology and best practices are a leftover from the always connected & steadily powered past.

http://offlinefirst.org/

Offline capability is a key characteristic of modern Progressive Web Applications. Offline first thinking must learn from and further what we’ve seen work with Responsive and Mobile First thinking.

Read the introduction and then follow up on A List Apart. Visit or organise a local event, join the Offline First Chat, or check out additional resources.

Especificacions del W3C:

  • Offline Web Applications: This specification highlights features (SQL, offline application caching APIs as well as online/offline events, status, and the localStorage API) from HTML5 and provides brief tutorials on how these features might be used to create Web applications that work offline.
  • Service Workers: This specification describes a method that enables applications to take advantage of persistent background processing, including hooks to enable bootstrapping of web applications while offline.
  • IndexedDB: This specification defines APIs for a database of records holding simple values and hierarchical objects. Each record consists of a key and some value. Moreover, the database maintains indexes over records it stores. An application developer directly uses an API to locate records either by their key or by using an index. A query language can be layered on this API. An indexed database can be implemented using a persistent B-tree data structure.
  • WebStorage: This specification defines an API for persistent data storage of key-value pair data in Web clients.

Molt interessant el projecte Github:

https://github.com/pazguille/offline-first

Recursos:

Llibreries

sw-precache

sw-precache

https://medium.com/@Huxpro/how-does-sw-precache-works-2d99c3d3c725
https://github.com/GoogleChrome/sw-precache/

sw-toolbox

sw-toolbox

https://github.com/GoogleChrome/sw-toolbox
https://medium.com/@Huxpro

Per què HTTPS?

http://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features

Application Shell Architecture

Vegeu Application Shell Architecture

Resources:

Vegeu també

Enllaços externs