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 Evolution of the "Web App" - FluentConf 2015
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Henrik Joreteg
April 23, 2015
Technology
1.2k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Evolution of the "Web App" - FluentConf 2015
Henrik Joreteg
April 23, 2015
More Decks by Henrik Joreteg
See All by Henrik Joreteg
SeattleJS May 14, 2015
henrikjoreteg
1
1.1k
BackboneConf 2014
henrikjoreteg
3
510
A Single Page Story – http://ffconf.org/
henrikjoreteg
12
1.7k
I've seen the future
henrikjoreteg
1
250
Making WebRTC Awesome, CascadiaJS 2013
henrikjoreteg
9
2.3k
EdgeConf 2013 - Realtime/WebRTC Intro Talk
henrikjoreteg
1
250
WebRTC - JSConf Brazil 2013
henrikjoreteg
10
1.4k
getUserMedia();
henrikjoreteg
1
210
The State of Realtime at &yet
henrikjoreteg
6
450
Other Decks in Technology
See All in Technology
事業会社における 機械学習・推薦システム技術の活用事例と必要な能力 / ml-recsys-in-layerx-wantedly-2026
yuya4
0
160
現場のトークンマネジメント
dak2
1
190
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
190
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
180
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
250
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
270
BPaaSで進むAIオペレーションの現在地 AI実装が効く領域とスケーラビリティの選定と実装
kentarofujii
0
200
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
200
Kiro Ambassador を目指す話
k_adachi_01
0
130
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.9k
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
160
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.6k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.6k
Everyday Curiosity
cassininazir
0
240
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
620
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
The Limits of Empathy - UXLibs8
cassininazir
1
370
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
310
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Transcript
Evolution of the "Web App" @HenrikJoreteg
@Hoarse_JS
THIS USED TO BE SIMPLE!
1. WRITE SOME HTML 2. LAY IT OUT WITH FRAMES
OR TABLES 3. FTP IT TO A SERVER! 4. BAM!
CONGRATULATIONS, YOU’RE A WEB DEVELOPER!
THEN IT GOT HARDER
WHO’S WRITTEN THEIR OWN BLOG SOFTWARE?
OVER ENGINEERING A BLOG WAS A RITE OF PASSAGE
1. WRITE SOME PHP/PYTHON/ASP/COLDFUSION 2. SET UP RELATIONAL DATABASE 3.
WRITE SOME BAD SQL 4. SHOVE DYNAMIC DATA INTO OUR HTML 5. LAY IT OUT WITH CSS (NO TABLES THIS TIME) 6. RUN IT ON SHARED HOSTING SOMEWHERE
CONGRATULATIONS, YOU’RE A WEB DEVELOPER!
PHEW!!
THEN WE GOT "SMART"
USE A FRAMEWORK!!
1. RAILS 2. ALL THEM PHP FRAMEWORKS 3. DJANGO 4.
ETC.
OUR EXCESSIVLELY DYNAMIC BLOG… IS NOW BETTER ORGANIZED AND HAS
MORE DEPENDENCIES
CONGRATULATIONS, YOU’RE A WEB DEVELOPER!
WHAT ABOUT TODAY?
BACK-END FRONT-END ISOMORPHIC RESPONSIVE ES6(2015) BABEL TRACEUR AMD COMMONJS MVC
MVVM FLUX RELAY GULP GRUNT API-GATEWAY CORS JSON-WEB-TOKENS NODE.JS HTTP 2.0 OFFLINE-FIRST MOBILE-FIRST WEBGL WEBRTC WEBSOCKET GRAPHQL AMPERSAND EMBER REALTIME REDIS RIAK LEVELDB RABBITMQ PUSH-NOTIFICATION ENABLED BACKBONE APP WITH POLYFILLED POLYMER WEB COMPONENTS
CONGRATULATIONS YOU MIGHT BE A "WEB DEVELOPER"
WHAT DOES "WEB DEVELOPER" EVEN MEAN?
WHAT DOES "WEB APP" EVEN MEAN?
THE BROWSER ISN’T OUR RENDERER
THE BROWSER IS OUR RUNTIME
THE WEBVIEW IS OUR RUNTIME
MORE LOGIC MOVING TO FRONT-END JS
DEVS WITH DIFFERENT BACKGROUNDS CONVERGING ON JS
BRINGING THEIR PATTERNS AND PREFERENCES
BACK-END FRONT-END ISOMORPHIC RESPONSIVE ES6(2015) BABEL TRACEUR AMD COMMONJS MVC
MVVM FLUX RELAY GULP GRUNT API-GATEWAY CORS JSON-WEB-TOKENS NODE.JS HTTP 2.0 OFFLINE-FIRST MOBILE-FIRST WEBGL WEBRTC WEBSOCKET GRAPHQL AMPERSAND EMBER REALTIME REDIS RIAK LEVELDB RABBITMQ PUSH-NOTIFICATION ENABLED BACKBONE APP WITH POLYFILLED POLYMER WEB COMPONENTS
SINGLE PAGE APPS
HUH?
SINGLE PAGE APPS
"NATIVE"
I’M A WEB DEVELOPER
NATIVE WEB APP
1. JAVASCRIPT 2. HTML 3. CSS 4. BROWSER APIS
FUNDAMENTAL DISTINCTION…
THE BROWSER IS YOUR RUNTIME
SEND THE APP ITSELF TO THE BROWSER INSTEAD OF THE
RESULT OF RUNNING IT
<!doctype> <script src="app.1.3.7.js"></script>
SHOULD WE EVEN BE DOING THIS?
SHOULD WE BUILD APPS THAT REQUIRE JAVASCRIPT?
None
SHOULD WE BUILD APPS THAT REQUIRE JAVASCRIPT?
{{ RAISE YOUR HAND }}
YES!
WHAT SERVICE ARE WE PROVIDING?
CONTENT?
CONTENT SHOULD JUST WORK™
NO REASON TO COMPLICATE THINGS THAT CAN BE SIMPLE
BUT THE WEB IS NO LONGER JUST ABOUT LINKED CONTENT!
THERE ARE CASES WHERE CLIENTSIDE FUNCTIONALITY IS THE CORE VALUE
PROVIDED BY SERVICE
None
None
None
None
1. RENDERING 2. NETWORKING 3. FILE READ/WRITE 4. STORAGE 5.
WEB AUDIO APIS 6. WEBGL 7. VOICE/VIDEO HIGH PERFORMANCE
BROWSERS ARE NOT DUMB DOCUMENT VIEWERS
MOST CAPABLE UBIQUITOUS RUNTIMES ON THE PLANET
I’M JUST GOING TO SAY IT:
THERE ARE TWO TYPES OF APPLICATIONS ON THE WEB
1. NATIVE WEB APPS
2. SERVER-SIDE WEB APPS
THEY ARE FUNDAMENTALLY DIFFERENT
AND THAT’S O.K.
ANYTHING WE CAN BUILD WITH WEB TECH I THINK WE
SHOULD
EVEN IF WE CAN’T SUPPORT OLDER BROWSERS
THE WEB IS INFINITELY MORE OPEN THAN NATIVE PLATFORMS
USER EXPECTATIONS HAVE EVOLVED
THE WEB IS DOING PRETTY WELL ON DESKTOPS
THE WEB IS LOSING ON MOBILE
THE WEB IS LOSING ON EXPERIENCE
WE OFTEN PREFER NATIVE APPS TO THE WEB
QUALITY AND POLISH OF USER EXPERIENCE IS OFTEN MUCH BETTER
LET’S FIX THIS!
WE’RE TOO FOCUSED ON THE PAST INSTEAD OF COMPETING ON
EXPERIENCE
SAYING THERE’S A DISTINCTION MAKES SOME PEOPLE MAD
"Everything should be an enhancement!"
WE’RE ON THE SAME TEAM!
WE WANT THE OPEN WEB TO WIN!
HOW COULD WE EVEN BUILD A PROGRESSIVELY ENHANCED VERSION OF
TALKY?
SHOULD WE NOT HAVE BUILT IT?
WHERE’S THE DOWNSIDE?
LET’S LOOK A BIT CLOSER AT TWITTER
WHAT IS TWITTER?
IS IT A WEB APP?
NO.
IT’S A SERVICE
APP != SERVICE
TWITTER android app iOS app tweetbot twitter.com tweet deck ad
dashboard
I DIDN’T REALLY CARE HOW THEY BUILT THEIR WEBAPP
BECAUSE I DIDN’T USE IT ANYWAY!
I WAS USING AN iOS APP!
THEIR WEB APP HAD ALREADY FAILED ME!
LET’S THINK ABOUT THIS
WHEN I FOLLOW A LINK TO A RANDOM TWEET ON
MY PHONE…
JUST LET ME READ IT!
plain text I DON’T MIND IF IT’S
DON’T MAKE ME DOWNLOAD 2MB OF JS TO READ 140
CHARACTERS OF TEXT!
THIS IS THE PROBLEM THEY FIXED WITH NEW NEW TWITTER
BUT…
CATCHING UP WITH ALL THINGS TWITTER IS A FUNDAMENTALLY DIFFERENT
USE CASE
FAILING TO RECOGNIZE DISTINCTION MAKES US FLOUNDER
A SERVICE CAN PROVIDE BOTH!
TWITTER.COM & TWEETDECK.COM
THERE’S STILL SOME GAPS BETWEEN WEB AND NATIVE
REAL OFFLINE SUPPORT
PLATFORMS THAT TREAT NATIVE WEB APPS AS FIRST CLASS CITIZENS
THOSE THINGS ARE CHANGING
1. SERVICE WORKER
PROGRAMMABLE CACHE LAYER CAN INTERCEPTS ALL NETWORK REQUESTS 1. SERVICE
WORKER
THIS IS HUGE!
2. INSTALLABLE WEB APPS
CHROME M39+ FIREFOX https://developer.chrome.com/multidevice/android/installtohomescreen https://w3c.github.io/manifest/ JSON-BASED WEB MANIFEST
1. SIGNAL INTENT 2.UNINSTALL 3.DEEPER DEVICE APIS
"What about performance?"
WHITE PAGE OF DEATH
TIME TO FIRST PAINT
A PRIMED CACHE LARGELY INVALIDATES THIS ARGUMENT
<!doctype> <script src="app-1.2.7.js"></script> 1. GIVE IT A UNIQUE NAME HTTP/1.1
200 OK Cache-Control: max-age=REALLY BIG NUMBER! Content-Encoding: gzip 2. CACHE IT FOREVER
MOST OF THESE TYPES OF APPS REQUIRE YOU TO BE
LOGGED IN
PRE-FETCH APP ON PUBLIC PAGES OR LOGIN PAGE
NATIVE WEB APPS CAN STILL HAVE SMALL JS PAYLOADS!
ALL JS IN THE AMPERSAND.JS APP ON TODOMVC.COM COMBINED 28kb
min + gzip
SMALLER THAN JQUERY 2.0
THE OTHER ASPECT OF PERFORMANCE…
ONCE LOADED, PERFORMANCE IS WAY BETTER!
IF I’M GOING TO LEAVE APP OPEN ON MY DESKTOP
I CARE WAY LESS ABOUT LOAD TIME
"What about dual rendered a.k.a. isomorphic apps?"
JUST A CLIENTSIDE APP WITH AN OPTIMIZED INITIAL RENDER
GOING FULL-ISOMORPHIC RENDERING, WITH USER DATA AND ALL…
OFTEN REQUIRES DRAMATICALLY MORE COMPLEX CODE
THERE ARE SOME CASES WHERE IT MAKES SENSE
WITH STATE OF TOOLING TODAY OFTEN NOT WORTH THE COMPLEXITY
HOWEVER…
DOESN’T HAVE TO BE ALL OR NOTHING
WE CAN PRE-RENDER EVERYTHING THAT’S NOT USER-SPECIFIC DATA
WE CAN DO THIS AS A FULLY STATIC SITE
site.com/pic.png -> pic.png site.com -> index.html site.com/page -> page.html site.com/asdf
-> 404.html or 200.html Route: Asset:
WOAH!
APPS USUALLY HAVE: 1. public/marketing pages 2. all the stuff
behind the login
WRITE "PUBLIC" PAGES AND APP LAYOUT HTML AS ISOMORPHIC COMPONENTS
PRE-RENDER THEM TO STATIC PAGES AT BUILD TIME!
SLIP IN THE BUILT JS BEFORE: </body>
index.html: public home page 200.html: application layout
COULD POTENTIALLY EVEN DO THIS FOR DYNAMIC/PUBLIC DATA
THINK ABOUT WHAT WE GET
pixels on the screen immediately
TOTALLY CRAWLABLE (SEO)
JS TAKES OVER ROUTING WHEN LOADED
DEPLOYMENT AND OPS BECOME AS SIMPLE AS FTP
WRITE 1 VERSION OF YOUR APP GET 90% OF BENEFIT
FROM ISOMORPHIC RENDERING
USERS WILL END UP WITH A PRIMED CACHE JUST BY
VISITING YOUR MARKETING PAGES
READY FOR: PHONEGAP/CORDOVA DESKTOP APP
NOW WE HAVE AN APP WITH A SINGULAR CONCERN: PRESENTATION
I’VE STARTING BUILDING ALL MY APPS AS STATIC NATIVE WEB
APPS
TOTALLY <3 IT!
FOR SO LONG THE TREND HAS BEEN TOWARD COMPLEXITY
None
WHAT’S THE NEXT STEP IN THE EVOLUTION OF THE "WEB
APP"?
GOING BACK TO SIMPLE
GOING BACK TO THE STATIC WEB
STATIC NATIVE WEB APPS
POWERED BY SERVICES SOME WHICH WE BUILD MANY OF WHICH
WE RENT
surge.sh hood.ie firebase.com auth0.com divshot.com
SIMPLE OPEN SOURCE EXAMPLE: HubTags.com
•React •Ampersand.js •Webpack (hjs-webpack) •GitHub API •Surge.sh
andyet.com
HOW CAN WE BE SURE WE’RE BUILDING WITH THE RIGHT
TOOLS?!
WE CAN’T!
WHAT DO WE KNOW?
THINGS WILL CHANGE
BUILD MODULAR SYSTEMS THAT STRIVE TO BE AS SIMPLE AS
THEY CAN BE
OFFLOADING PRESENTATION STATIC NATIVE WEB APPS
BUILDING MICROSERVICES TO ENABLE THAT TYPE OF APP
OPTIMIZE FOR CHANGE. IT IS THE ONLY CONSTANT.
LET’S KEEP PUSHING FOR SIMPLICITY
LET’S BUILD FOR THE FUTURE OF THE WEB, NOT ITS
PAST
THANKS! @HenrikJoreteg, andyet.com