Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Web to PWA!
Search
Gefy Marcos
November 17, 2018
Technology
0
63
Web to PWA!
Como transformar um site em uma PWA nota 100 no lighthouse!
Gefy Marcos
November 17, 2018
Tweet
Share
More Decks by Gefy Marcos
See All by Gefy Marcos
Zod: Levando a validação de dados a um novo nível.
gefymarcos
0
870
ReactJS Starter
gefymarcos
0
27
Clean Code: Boas práticas e design de código
gefymarcos
0
92
React Native por onde começar
gefymarcos
0
140
Other Decks in Technology
See All in Technology
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
240
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
1.3k
いつか使うかも貯金してたらめちゃめちゃ機能が増えてた話
riyaamemiya
0
300
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
370
EMとして2023年度に頑張ったこと / What we did well in FY2023 as a EM
pauli
1
170
20分で完全に理解するGrafanaダッシュボード
hamadakoji
3
670
On Your Data を超えていく!
hirotomotaguchi
2
690
Terraformあれやこれ/terraform-this-and-that
emiki
8
1.4k
IaCジェネレーターとBedrockで詳細設計書を生成してみた
tsukasa_ishimaru
1
280
Azureの基本的な権限管理の勉強会
yhana
0
590
検証を通して見えてきたTiDBの性能特性
lycorptech_jp
PRO
6
3.8k
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
355
18k
Scaling GitHub
holman
457
140k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
How STYLIGHT went responsive
nonsquared
92
4.8k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
GraphQLとの向き合い方2022年版
quramy
32
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
30
6k
The Power of CSS Pseudo Elements
geoffreycrofte
60
5k
Making Projects Easy
brettharned
108
5.5k
Fireside Chat
paigeccino
21
2.6k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Docker and Python
trallard
34
2.7k
Transcript
Web to
None
None
None
Site estático Site dinâmico Ajax Site Responsivo PWA 1991 2005
1997 2012 2015
Quem está usando?
O que é PWA?
"Progressive Web Apps são experiências que combinam o melhor da
web e o melhor dos aplicativos.” Fonte: Developers Google
Pré-requisitos
Progressivo
Responsivo
Independente de conectividade
Semelhante a aplicativos
Atual
Seguro
Descobrível
Reenvolvente
Instalável
None
Linkável
Lighthouse
https, sempre HTTPS 1
O que fazer? • Habilitar HTTPS no servidor, isso é
obrigatório. • Redirecionar o status 301 também para HTTPS.
Como fazer?
responsivo e rápido 2
Como fazer? • Media queries. • Sempre se preocupar com
performance e boas práticas. • Lighthouse.
Como fazer? <meta name="viewport" content="width=device-width, initial-scale=1” > • Sempre definir
corretamente o viewport no browser.
Cor tema do site 3
None
Como fazer? <meta name="theme-color" content="#000000"> • Escolher uma cor e
buscar o código hexadecimal.
Manifesto 4
O que fazer? • Criar o manifest.json. • App Manifesto
ou PWA Builder.
{ "name": "Gefy Marcos", "short_name": "Gefy", "theme_color": "#333333", "background_color": "#000000",
"display": “standalone", "//fullscreen, browser “start_url": "https:"//gefy.com.br/index.html", "orientation": “portrait", "//any, landscape "icons": [{ "src": "/img/logo-512x512.png", "sizes": "512x512", "type": "image/png" }] }
Importante "short_name": "Gefy", • O short_name não pode ter mais
que 12 letras. • Nome que aparece com o ícone no celular.
Importante • O background_color é obrigatório. "background_color": "#000000",
Importante • É obrigatório ao menos um ícone 512x512. •
Icone somente PNG. "icons": [{ "src": "/img/logo-512x512.png", "sizes": "512x512", "type": "image/png" }]
Importante <link rel="manifest" href="/manifest.json"> • Adicionar no head.
Service Worker 5
Fonte: https://caniuse.com/#feat=serviceworkers Suporte
É um script executado em segundo plano pelo navegador.
Executado separado da página web.
Possibilita utilizar push notifications, sincronização em segundo plano, etc…
Capacidade de interceptar e tratar solicitações de rede.
O service worker funciona numa thread separada do browser, ele
não tem acesso ao DOM. Importante
Sempre deve ter o mesmo nome e ficar no mesmo
local para não gerar duplicação. Importante
Lembre-se de deletar o cache antigo quando o site for
atualizado. Importante
Como fazer? • Registrar o service worker no nosso head.
Como fazer? if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(function(registration) {
console.log('Registration successful’); }).catch(function(err) { console.log('Registration failed: '); }); }
Ciclo de vida
Install É ativado só uma vez, ao registrar o sw.js.
var filesToAdd = ['/'] self.addEventListener('install', function(event) { event.waitUntil( caches.open('gefy-pwa') .then(function(cache)
{ return cache.addAll(filesToAdd); }) ); });
É ativado uma vez, após o “install”, após o service
worker assumir o controle dos caches. Activate
self.addEventListener('activate', function(event) { var cacheWhitelist = ['gefy-pwa']; event.waitUntil( caches.keys().then(function(cacheNames) {
return Promise.all( cacheNames.map(function(cacheName) { if (cacheWhitelist .indexOf(cacheName) ""=== -1) { return caches.delete(cacheName); } }) ); }) ); });
É ativado toda vez que uma página é requisitada. Fetch
self.addEventListener('fetch', function(event) { event.respondWith( checkResponse(event.request) .catch(function() { return returnFromCache(event.request)} ));
event.waitUntil(addToCache(event.request)); });
var checkResponse = function(request) { return new Promise(function(fulfill, reject) {
fetch(request) .then(function(response) { if(response.status ""!== 404) { fulfill(response) } else { reject() } }, reject) }); };
var returnFromCache = function(request) { return caches.open('gefy-pwa') .then(function (cache) {
return cache.match(request) .then(function (matching) { if(!matching "|| matching.status "== 404) { return cache.match(‘/404.html') } else { return matching } }); }); };
var addToCache = function(request) { return caches.open('gefy-pwa') .then(function (cache) {
return fetch(request) .then(function (response) { return cache.put(request, response); }); }); };
Agora temos nosso primeiro PWA! YES…
• Online first • Offline first Abordagens
self.addEventListener('fetch', function(event) { event.respondWith( returnFromCache(event.request) .catch(function() { return checkResponse(event.request)} ));
event.waitUntil(addToCache(event.request)); });
Testando
• O que é e como funciona um PWA. •
Princípios básicos. • Como testar um PWA. • Cor de tema. • Manifesto. • Service worker. • Cache e redirecionamento. Conclusão
Obrigado! @gefymarcos gefy.com.br/talks