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
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
35
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
Everything As Code
yosuke_ai
0
500
2025年 山梨の技術コミュニティを振り返る
yuukis
0
150
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
740
Java 25に至る道
skrb
3
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
4.9k
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
790
Keynoteから見るAWSの頭の中
nrinetcom
PRO
1
170
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
620
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Qiita Bash アドカレ LT #1
okaru
0
170
1万人を変え日本を変える!!多層構造型ふりかえりの大規模組織変革 / 20260108 Kazuki Mori
shift_evolve
PRO
6
1k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Spectacular Lies of Maps
axbom
PRO
1
420
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
160
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
ラッコキーワード サービス紹介資料
rakko
0
1.9M
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
360
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Prompt Engineering for Job Search
mfonobong
0
140
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