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
Natura Meet Up PWA - Offline first
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Marcus Ortense
September 12, 2019
Programming
76
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Natura Meet Up PWA - Offline first
Marcus Ortense
September 12, 2019
More Decks by Marcus Ortense
See All by Marcus Ortense
Analytics para Devs
ortense
1
97
Concrete on Beer JavaScript - Offline first
ortense
0
130
Escrevendo javascript testável
ortense
1
170
Serverless
ortense
0
85
Talk - let, const & arrow functions
ortense
0
68
Talk - JavaScript Isomórfico
ortense
0
83
Desenvolvimento vs Conversão
ortense
2
110
Other Decks in Programming
See All in Programming
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
410
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
170
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
The NotImplementedError Problem in Ruby
koic
1
860
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.3k
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
OSもどきOS
arkw
0
580
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
160
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
350
AIで効率化できた業務・日常
ochtum
0
140
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
590
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
260
A designer walks into a library…
pauljervisheath
211
24k
Paper Plane
katiecoart
PRO
1
51k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Six Lessons from altMBA
skipperchong
29
4.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
A Soul's Torment
seathinner
6
3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Transcript
– OFFLINE FIRST meetup
Chapter Manager @ Concrete
Tech Lead @ Social Selling
– OFFLINE FIRST meetup Por que isso é importante?
– Qual a realidade da internet hoje?
– 40% dos usuários abandonam o site após 3 segundos
de espera. fonte: Dynatrace / Gomez.com (http://bit.ly/29jzPRc)
– Amazon identificou que cada 100 milissegundos de espera representa
a queda de 1% nas vendas fonte: Amazon / Findory (http://bit.ly/2kd4UOp)
– Em 2019 a cobertura de 3G no Brasil chegou
a 97.6%, atingindo 5438 municípios. fonte: Operadoras (http://bit.ly/2kaUSNC)
– 33% dos brasileiros acessa a internet apenas por dispositivos
móveis fonte: IBGE (http://bit.ly/2k8rFTs)
– 76% dos brasileiros utiliza banda larga móvel, sendo que
17% não possui acesso a outro tipo de conexão. fonte: IBGE (http://bit.ly/2k8rFTs)
– Brasil ocupa a 50ª posição no ranking de velocidade
de internet móvel. fonte: IBGE (http://bit.ly/2k8rFTs)
– A média de velocidade de internet móvel no Brasil
é 13mbs, abaixo da média global de 17mbs. fonte: IBGE (http://bit.ly/2k8rFTs)
– Mais de 70% dos acessos ao rede vem de
dispositivos móveis. fonte: Rede Natura
– E o que isso tem a ver com PWA?
None
None
None
– Progressive Web Apps é uma experiência do usuário ao
alcance da web confiável, rápida e engajante. fonte: Google Developers (http://bit.ly/2kI5J1J)
– Progressive Web Apps é uma experiência do usuário ao
alcance da web confiável, rápida e engajante. fonte: Google Developers (http://bit.ly/2kI5J1J)
– Carregue instantaneamente e nunca mostre o downasaur, mesmo em
condições de rede incertas. fonte: Google Developers (http://bit.ly/2kI5J1J)
– Mas como?!
– Tipo de conexão console.log(navigator.connection) NetworkInformation { downlink: 10, //
Estimativa da banda em MB/S effectiveType: '4g', // Tipo de conexão slow-2g, 2g, 3g', or 4g rtt: 0, // round-trip time em milissegundo saveData: false, // O usuário utiliza economia de dados onchange: null, // Event Handler }
– Online/Offline window.addEventListener('online', (e) => console.log('Online ')); window.addEventListener('offline', (e) =>
console.log('Offline ')); if(window.navigator.onLine) { console.log('Online ') } else { console.log('Offline ') }
– Service Workers INSTALL ACTIVATED ERROR IDLE TERMINATED FETCH /
MESSAGE fonte: Google Developers | Web Fundamentals (http://bit.ly/2kxftft)
if('serviceWorker' in navigator) { console.log('ServiceWorker é suportado neste navegador ')
} else { console.log('ServiceWorker não é suportado ') }
navigator.serviceWorker.register('assets/sw.js') .then(reg => console.info('registered ', reg)) .catch(err => console.error('error registering
', err))
navigator.serviceWorker.register('assets/sw.js') .then((reg) => { if(reg.installing) { console.log('Instalando ') } else
if(reg.waiting) { console.log('Instalado ✅') } else if(reg.active) { console.log('SeviceWorker ativo ') } })
navigator.serviceWorker.register('assets/sw.js') .then((reg) => { const sw = reg.installing reg.addEventListener('updatefound', ()
=> { sw.addEventListener('statechange', () => { console.log(`Status atualizado para ${sw.state} `) }) }) })
const PRE_CACHE_URL = [ '/index.html', '/styles/main.css', '/script/main.js' ]; self.addEventListener('install', (event)
=> { event.waitUntil(caches.open('cache-app-v1') .then((cache) => cache.addAll(PRE_CACHE_URL))) })
self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request).then((response) => { if(response) return
response return fetch(event.request) }) ) })
event.respondWith( caches.match(event.request).then((response) => { if(response) return response return fetch(event.request) .then(response
=> { caches.open('cache-app-v1').then(cache => cache.put(event.request, response.clone())) return response }) }) .catch(() => caches.match('fallback.html')))
– CONCLUSÃO
– Offline first é possível, faz sentido, pode ser feito
hoje e cria uma a experiência mais confiável para o seu usuário.
OBRIGADO! @marcusortense
[email protected]
bit.ly/2kypFEv