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
フロントエンドエンジニアのためのServer Push入門 / Server Push for...
Search
Masashi Hirano
June 07, 2018
Programming
0
390
フロントエンドエンジニアのためのServer Push入門 / Server Push for Frontend Engineer
JAM plus #1 でNetlifyでHTTP/2サーバプッシュするLTしました
https://kfug.connpass.com/event/87799/
Masashi Hirano
June 07, 2018
Tweet
Share
More Decks by Masashi Hirano
See All by Masashi Hirano
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
4.3k
Protocol Buffers and Connect for Frontend Development
masashi
0
140
You may not need XXX in Node.js
masashi
5
1.7k
OSSとコミュニティを支える
masashi
1
1.6k
英語ができなかった自分達が、グローバルチーム立ち上げに挑戦!?
masashi
1
3.6k
フロントエンド開発のためのセキュリティ入門について
masashi
1
560
フロントエンド開発のためのセキュリティ入門
masashi
50
18k
Node.jsの2022年と未来 / Node.js in 2022 and Future
masashi
1
1.1k
Corepack ~Node.jsに追加されたパッケージマネージャーマネージャー~ / #tng37
masashi
3
13k
Other Decks in Programming
See All in Programming
MUSUBIXとは
nahisaho
0
130
AtCoder Conference 2025
shindannin
0
1k
Apache Iceberg V3 and migration to V3
tomtanaka
0
150
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
20
6.8k
AI時代の認知負荷との向き合い方
optfit
0
150
AI & Enginnering
codelynx
0
110
SourceGeneratorのススメ
htkym
0
190
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
590
今から始めるClaude Code超入門
448jp
7
8.5k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
100
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
How to Talk to Developers About Accessibility
jct
2
130
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
30 Presentation Tips
portentint
PRO
1
210
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
So, you think you're a good person
axbom
PRO
2
1.9k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
ϑϩϯτΤϯυ ΤϯδχΞͷͨΊͷ Server Pushೖ JAM plus #1 Masashi Hirano
(@shisama)
{ "about": { "name": "Masashi Hirano", "works": "Weblio, Inc.", "twitter":
"@shisama_", "github": "shisama" } }
λʔήοτ • ૣ͍WebΛఏڙ͍ͨ͠ਓ • αʔόઃఆͨ͘͠ͳ͍ ָ͍ͨ͠ϑϩϯτΤϯ υΤϯδχΞͷօ༷
ࠓ͞ͳ͍͜ͱ • HTTP/1.1HTTP/2ͷৄࡉ • αʔόͷ
HTTP/1.1ͷ • 1ͭͷϦΫΤετ͕ྃ͢Δ·Ͱ࣍ͷϦΫΤετߦ͑ͳ͍ • ଟॏԽ͢Δ͜ͱͰ1υϝΠϯͷෳଓՄೳ • ಉ࣌ଓݶΒΕ͍ͯΔ • Chromeͷ߹6ͭ·Ͱ͔͠ಉ࣌ଓͰ͖ͳ͍ https://codezine.jp/article/detail/8663
HTTP/1.1ͷ • HTTPύΠϓϥΠϯ • લճͷϦΫΤετΛͨͣʹ࣍ͷϦΫΤετΛૹ৴Մೳ • αʔόʔϦΫΤετͷॱ൪௨ΓʹϨεϙϯεΛฦ͞ͳ͚ΕͳΒͳ͍ • ઌ಄ͷϦΫΤετʹ͕͔͔࣌ؒͬͨ߹ɺޙଓͷϨεϙϯεϒϩοΫ ͞ΕΔ
https://codezine.jp/article/detail/8663
HTTP/1.1ͷ • ߴͳWeb͕ٻΊΒΕΔݱ • ϦΫΤετΛݮΒ͍ͨ͠ • CSSεϓϥΠτɺJSϑΝΠϧͷόϯυϧͳͲͰ ରԠ͍ͯ͠Δ͕ਏ͍ • όϯυϧͨ͠ϑΝΠϧͷେ͖͕͞ʹͳΔ͜
ͱ
HTTP/2
HTTP/2ͱ • HTTP/1.1ͷϨΠςϯγΛղܾ͢ΔͨΊͷ৽͠ ͍ϓϩτίϧ • HTTP/1.1͔Β16ͿΓͷΞοϓσʔτ • 2015ʹRFCԽࡁΈ(RFC7540) • ΄΅ͯ͢ͷϒϥβ͕ରԠ(IE11!)
HTTP/2ͷओͳػೳ • ετϦʔϜͷଟॏԽ • ετϦʔϜͷ༏ઌ • ϑϩʔ੍ޚ • ϔομѹॖ(HPACK) •
αʔόϓογϡ
HTTP/2ͷओͳػೳ • ετϦʔϜͷଟॏԽ • ετϦʔϜͷ༏ઌ • ϑϩʔ੍ޚ • ϔομѹॖ(HPACK) •
αʔόϓογϡ
αʔόϓογϡͱ • Ϧιʔεऔಘʹ1RTT(ϦΫΤετ+Ϩεϙϯε)Λඞཁͱ͠ͳ͍ • ࠷ॳͷϦΫΤετΛड͚औͬͨαʔό͕࣍ͷϦΫΤετΛ༧ ଌͯ͠ΫϥΠΞϯτʹpush͢Δ )5.-ͷϦΫΤετʹର ͯ͠$44ͱը૾Λಉ࣌ʹ ৴͍ͯ͠Δ https://giuseppeciotta.net/getting-to-know-http20-with-the-mosaic-demo.html
αʔόΛ৮Βͳ͚Ε͍͚ͳ͍ͷͰ͠ΐɾɾɾ
ϑϩϯτΤϯυ ΤϯδχΞͷͨΊͷ Server Pushೖ Masashi Hirano (@shisama)
ϑϩϯτΤϯυ ΤϯδχΞͷͨΊͷ Server Pushೖ Masashi Hirano (@shisama) αʔόͷ͠·ͤΜʂʂ
Netlify
Netlifyͱ • ߴػೳϗεςΟϯάαʔϏε • ϏϧυɾσϓϩΠɾϗεςΟϯάΛͯ͢ߦ͑Δ • GitHubʹ͋ΔϦϙδτϦΛͦͷ··ϗεςΟϯ άͰ͖Δɻpush͢ΔͨͼʹࣗಈσϓϩΠ • HTTPSɺHTTP/2͕ແྉͰ؆୯ʹ͑Δ
https://www.netlify.com/blog/2017/07/18/http/2-server-push-on-netlify/
NetlifyͰαʔόϓογϡ • σϓϩΠ͢ΔσΟϨΫτϦʹ_headersͱ͍͏ ϑΝΠϧΛஔ͚ͩ͘ • _headersʹͲͷϦιʔεΛpush͢Δͷ͔ॻ͘
NetlifyͰαʔόϓογϡ . !"" public # !"" _headers # !"" my-app.js
# !"" index.html # %"" style.css %"" src !"" my-app.js !"" index.html %"" style.css QVCMJDΛσϓϩΠ͢Δ߹ɺ QVCMJDԼʹ@IFBEFSTΛஔ͘
_headersϑΝΠϧ /server-push-path Link: </my-app.js>; rel=preload; as=script Link: </style.css>; rel=preload; as=style
ϦΫΤετͷύε -JOLQVTI͍ͨ͠ϦιʔεͷύεSFMQSFMPBEBTϦιʔεͷछྨ
Ϩεϙϯεϔομʔ ϦΫΤετͨ͠IUNMͷϨεϙϯεϔομʔ ʹMJOL͕Ճ͞ΕΔ
HTTP1.1ͱHTTP/2 ൺֱ $ISPNFͷ߹ɺ)551ͩͱ 1SPUPDPM͕IʹͳΔ
HTTP1.1ͱHTTP/2 ൺֱ *OJUJBUPS͕1VTI0UIFSʹͳ͍ͬͯͯαʔ όϓογϡ͞Ε͍ͯΔ͜ͱ͕Θ͔Δ
αʔόϓογϡ͕ෆཁʹͳͬͨΒ /server-push-path Link: </my-app.js>; rel=preload; as=script nopush Link: </style.css>; rel=preload;
as=style OPQVTIΛ͚Δ
None
firebaseͱ • GoogleͷϞόΠϧϓϥοτϑΥʔϜ • Realtime DatabaseɺCloud Functionɺ Crashlytics etc •
ϗεςΟϯάαʔϏε͋Δ • ແྉͰHTTPSHTTP/2͕͑Δ
firebaseͰαʔόϓογϡ . !"" firebase.json !"" public # !"" img1.png #
!"" index.html # %"" style.css %"" src !"" img1.png !"" index.html %"" style.css pSFCBTFKTPOΛஔ͘
firebase.json { "hosting": { "public": "public", "headers": [ { "source":
"/", "headers": [{ "key": "Link", "value": "</elements/my-app.js>;rel=preload;as=script,</ style.css>;rel=preload;as=style" }] } ] } }
·ͱΊ • HTTP/2αʔόϓογϡͰϦΫΤετΛݮΒ ͠ϖʔδϩʔυΛߴԽ • ߴػೳϗεςΟϯάαʔϏεΛ͏͜ͱͰ HTTP/2αʔόϓογϡ؆୯ʹ͑Δ
એ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠