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
The Web is a Contender
Search
Surma
September 25, 2015
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Web is a Contender
JSConf EU 2015
Surma
September 25, 2015
More Decks by Surma
See All by Surma
Know thy buzzwords: HTTP/2
surma
1
600
Houdini Breakout Session
surma
4
710
Houdini – Demystifying CSS
surma
3
350
Progressive Web Apps – Mobile has natively come to the Web
surma
5
330
The Glorious Era of HTTP/2
surma
1
140
Instant Loading
surma
4
1.4k
HTTP/2 101
surma
5
540
What if there isn’t?
surma
0
120
What if there isn’t?
surma
2
220
Other Decks in Technology
See All in Technology
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
1
1.1k
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
630
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
470
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
120
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
280
GoにおけるFFIのこれまでとこれから
goccy
4
1.2k
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
190
Claude Code本って、 読む必要あるの?
oikon48
1
140
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
110
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
250
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
140
少人数データチームのDevin活用実践事例
runandy16
2
460
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
580
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
A designer walks into a library…
pauljervisheath
211
25k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
RailsConf 2023
tenderlove
30
1.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
It's Worth the Effort
3n
188
29k
Transcript
The Web is a Contender q mobile
Surma @surmair
voice-memos.appspot.com
1B+ Users (25M+ Devs)
None
“Reach”
100+ websites per month
“The mobile war is oveR. . .” “the app has
Won” goo.gl/nLFRmY
“The is oveR. . .” “the goo.gl/nLFRmY ಠ_ಠ
Web Native spent on… 80% 20% goo.gl/nLFRmY
Web Native spent on… 22% 20% totally not important stuff
goo.gl/nLFRmY
Web Native spent on… 52% 48% goo.gl/nLFRmY
“Native apps can’t out-web the web” goo.gl/15sYYY
goo.gl/15sYYY
airhorner.com
airhorner.com
{ "name": "Air Horner", "short_name": "Air Horner", "icons": [{ "src":
"images/touch/Airhorner_128.png", "type": "image/png", "sizes": "128x128" },{ "src": "images/touch/Airhorner_192.png", "type": "image/png", "sizes": "192x192" }], "start_url": "/?homescreen=1", "display": "standalone", "background_color": "#2196F3", "theme_color": "#2196F3" }
Service Worker
goo.gl/IpsiH1
if ('serviceWorker' in navigator) { navigator.serviceWorker .register('/sw.js') .then(function(registration) { //
successful }).catch(function(err) { // failure }); }
Service Worker
var items = [ '/', '/styles/main.css', '/script/main.js' ]; self.addEventListener('install', function(event)
{ event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { return cache.addAll(items); }) ); });
self.addEventListener('fetch', function(event) { event.respondWith( caches .match(event.request) .then(function(response) { return response
|| fetch(event.request); })); });
wiki-offline.jakearchibald.com
wiki-offline.jakearchibald.com
sw-toolbox github.com/GoogleChrome/sw-toolbox
Service Worker
Push Notifications
navigator.serviceWorker.ready.then( function(sw) { sw.pushManager.subscribe() .then(function(subscription) { // Send subscription.endpoint //
to server }); }); }
self.addEventListener('push', function(event) { var n = new Notification('A Message!’); //
... }); self.addEventListener('notificationclick', function(event) { var url = event.notification.data.url; event.waitUntil(clients.openWindow(url)); });
simple-push-demo.appspot.com
None
HTTPS everywhere letsencrypt.com
Surma @surmair Thank you!