Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Progressive Web Apps e além

Progressive Web Apps e além

Breve introdução a Progressive Web Apps, abordando as principais características desejáveis, resultados e arquitetura necessária para implementação.

Links:
https://github.com/HenriqueLimas/weather-pwa

-----
Henrique Limas
[email protected]
https://github.com/HenriqueLimas

GDG Floripa

May 18, 2017
Tweet

More Decks by GDG Floripa

Other Decks in Programming

Transcript

  1. Mobile vs Mobile Web 87% 13% VS Source: comScore Mobile

    Metrix, U.S. +18, June 2016 Tempo gasto
  2. 80% Do tempo dos usuários são consumidos nos apps TOP

    3 Source: comScore Mobile Metrix, U.S. +18, June 2016 1 Facebook 2 Facebook Messenger 3 YouTube
  3. Mobile vs Mobile Web Source: comScore Mobile Metrix, U.S. +18,

    June 2016 Média de usuários únicos por mês (MM) Média de minutos por usuário 11,4 4,0 188,6 10,9
  4. Sem PlayStore e AppStore Sem problemas de atualização em lie-fie

    Simples test A/B Fácil acesso ServiceWorkers melhora 3x o tempo de loading
  5. Pensando em App-shell 1. Componentes principais 2. O que precisa

    estar na tela 3. Outros componentes de ui 4. Recursos necessários (JSS, CSS etc..)
  6. Client-side rendering Browser Server Browser Server Primeira requisição Espera, precisamos

    do JavaScript Executa o JavaScript Espera, precisamos do conteúdo Renderização
  7. Inserir o conteúdo no server Browser Server Browser Server Primeira

    requisição Espera, precisamos do JavaScript JavaScript retorna incluindo o conteúdo Executa o JavaScript Renderização
  8. Database no Browser Local Storage Fácil de usar Sincrono Caches

    Fácil de usar Asincrono Rápido Pouco suporte nos Browsers IndexedDB Rápido Asincrono Suporte nos Browsers Difícil de usar (localforage, lovefield) DADOS NÃO SÃO PERMANENTES!
  9. Installation var cacheName = ‘weatherPWA-v1’; var dataCacheName = ‘weatherData-v1’; var

    filesToCache = [...] // Lista das url self.addEventListener(‘install’, function (e) { e.waitUntil( caches.open(cacheName).then(function (e) { return cache.addAll(filesToCache) }) ) }) service-worker.js
  10. Activation self.addEventListener(‘activate’, function (e) { e.waitUntil( caches.keys().then(function (keyList) { return

    Promise.all(keyList.map(function (key) { if (key !== cacheName && dataCacheName) { Return caches.delete(keys) } })) }) ) }) service-worker.js
  11. Web App Manifest { “name”: “Weather”, “short_name”: “Weather”, “start_url”: “/index.html?hs=true”,

    “icons”: [{“src”: “img.png”,“sizes”: “48x48”,type: “image/png”}], “background_color”: “#3E4EB8”, “theme_color”: “#3E4EB8”, “display”: “standalone”, “orientation”: “portrait”, } manifest.json <link rel=“manifest.json” href=“manifest.json”> index.html
  12. E agora? - Offline cookbook (Jake Archibald) https://goo.gl/onRTtp - Promises

    https://goo.gl/xnIibs - Push Notifications https://goo.gl/sosvrl - Web Payments API https://goo.gl/QWq6nY - Credential Management API https://goo.gl/uFEOl4 - Pwa.rocks https://pwa.rocks - Pokedex.org https://goo.gl/6Ymrkd - Offline Web Apps on Github Pages https://goo.gl/cfZgew