Progressive web apps
Sin frameworks ni librerias
Progressive web apps
Vicky Dichiera
Jon Rojí
@Jnroji
@VickyDichiera


VAMOS A MEJORAR EL RENDIMIENTO Y ATRAER MAS USUARIOS
How to improve?



How to improve?
-
Mayor velocidad de carga
-
Accesible sin conexión
-
Notificaciones
-
Multiplataforma

Progressive web apps - What is this?
Shell
Instalable
Adaptable Design
Cacheable
Offline
Push Notifications
NOT A FRAMEWORK!
NOT A LIBRARY!
Progressive web apps - el futuro ya llegó
Ejemplo gráfico de las pwa serruchandole el piso a las app nativas

Progressive web apps - Shell
📦
PWA Canarias
Progressive web apps - Shell
dynamic imports
tagged templates
Custom Elements

Native JS
PWA Canarias
Progressive web apps - Shell
PWA Canarias

On stage 4!
Progressive web apps - Shell
PWA Canarias

💖 lit-html 💖
Progressive web apps - Shell
PWA Canarias
<my-comp></my-comp>
<div></div>
📦
<my-comp></my-comp>

Progressive web apps - Manifest


Progressive web apps - Manifest
{
"start_url": "/index.html",
"scope": ".",
"display": "standalone",
"orientation": "portrait-primary",
"theme_color": "#3f51b5",
"dir": "ltr",
"lang": "es-AR"
}

Progressive web apps - Generador Manifest

Progressive web apps - Instalable
Debe tener un archivo manifest.json
Debe tener un service worker
desde donde se maneje el evento fetch
Debe ser servido en HTTPs (o en localhost)
No estar previamente instalada

Progressive web apps - Instalable

Progressive web apps - Service workers

Progressive web apps - Service workers events

Progressive web apps - Service workers events
install
activate fetch sync push notificationclick notificationclose
lifecycle
network
push
Progressive web apps - offline
CACHE
INDEXEDDB
📁
{ ... }
Progressive web apps - Cache API

caches.open('cache_name_v1') cache.add()
cache.put()
cache.match()
cache.delete()
Progressive web apps - Estrategias de cacheo
Cache Only

self.addEventListener('fetch', (event) => {
event.respondWith(caches.match(event.request));
});
Progressive web apps - Estrategias de cacheo
Network Only
self.addEventListener('fetch', (event) => {
event.respondWith(fetch(event.request));
});

Progressive web apps - Estrategias de cacheo
Cache first, network fallback
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
if (response) {
return response;
} else {
return fetch(event.request);
}
})
)
});

Progressive web apps - Estrategias de cacheo
Network first, cache fallback
self.addEventListener('fetch', (event) => {
event.respondWith(
fetch(event.request)
.then((response) => {
return caches.open(CURRENT_CACHES['dynamic'])
.then((cache) => {
cache.put(event.request, response.clone());
return response;
})
})
.catch((err) => {
return caches.match(event.request).then((cacheResponse) => {
if (cacheResponse) {
return cacheResponse;
}
})
})
)
});

Progressive web apps - Recursos
Progressive web apps - IndexedDB

Progressive web apps - IndexedDB

Progressive web apps - IndexedDB

Progressive web apps - Working with PWAs
Devtools

Progressive web apps - Working with PWAs
Progressive web apps - Working with PWAs


Progressive web apps - Working with PWAs
Nuestra PWA certificada!

Progressive web apps - Working with PWAs

Progressive web apps - Working with PWAs

@Jnroji
@VickyDichiera
PWA-sin-frameworks
By Jon Rojí
PWA-sin-frameworks
- 1,555