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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
590
Houdini Breakout Session
surma
4
700
Houdini – Demystifying CSS
surma
3
350
Progressive Web Apps – Mobile has natively come to the Web
surma
5
310
The Glorious Era of HTTP/2
surma
1
130
Instant Loading
surma
4
1.3k
HTTP/2 101
surma
5
540
What if there isn’t?
surma
0
110
What if there isn’t?
surma
2
210
Other Decks in Technology
See All in Technology
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
120
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
120
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
130
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
120
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
860
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
130
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
140
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
0
800
2026 AI Memory Architecture
nagatsu
0
190
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
480
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
200
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
260
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
Thoughts on Productivity
jonyablonski
76
5.2k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
New Earth Scene 8
popppiees
3
2.4k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
860
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Pragmatic Product Professional
lauravandoore
37
7.3k
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!