Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
72
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
Desbravando a Carreira em Desenvolvimento: Dicas e Estratégias para iniciantes
gefymarcos
0
30
Zod: Levando a validação de dados a um novo nível.
gefymarcos
0
1.5k
ReactJS Starter
gefymarcos
0
34
Clean Code: Boas práticas e design de código
gefymarcos
0
160
React Native por onde começar
gefymarcos
0
150
Other Decks in Technology
See All in Technology
Amazon Quick Suite で始める手軽な AI エージェント
shimy
0
550
SQLだけでマイグレーションしたい!
makki_d
0
1.1k
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
7
760
品質のための共通認識
kakehashi
PRO
4
380
SREには開発組織全体で向き合う
koh_naga
0
380
Microsoft Agent 365 についてゆっくりじっくり理解する!
skmkzyk
0
390
学習データって増やせばいいんですか?
ftakahashi
2
510
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
550
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1k
Jakarta Agentic AI Specification - Status and Future
reza_rahman
0
110
寫了幾年 Code,然後呢?軟體工程師必須重新認識的 DevOps
cheng_wei_chen
1
1.5k
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
940
Featured
See All Featured
Crafting Experiences
bethany
0
18
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
59
Documentation Writing (for coders)
carmenintech
77
5.2k
Building AI with AI
inesmontani
PRO
1
560
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Technical Leadership for Architectural Decision Making
baasie
0
180
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.4k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
63
35k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
39
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
92
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
120
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