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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Masashi Hirano
June 07, 2018
Programming
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
フロントエンドエンジニアのための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
More Decks by Masashi Hirano
See All by Masashi Hirano
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
5k
Protocol Buffers and Connect for Frontend Development
masashi
0
180
You may not need XXX in Node.js
masashi
5
2.1k
OSSとコミュニティを支える
masashi
1
2.3k
英語ができなかった自分達が、グローバルチーム立ち上げに挑戦!?
masashi
1
3.9k
フロントエンド開発のためのセキュリティ入門について
masashi
1
610
フロントエンド開発のためのセキュリティ入門
masashi
50
19k
Node.jsの2022年と未来 / Node.js in 2022 and Future
masashi
1
1.2k
Corepack ~Node.jsに追加されたパッケージマネージャーマネージャー~ / #tng37
masashi
3
13k
Other Decks in Programming
See All in Programming
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
260
AIエージェント時代のコードレビューを設計する
nogu66
5
2.4k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
620
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
620
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
180
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
110
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
350
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
130
バグを直したら useEffect が消えた
colorful12
3
830
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
540
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
180
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
It's Worth the Effort
3n
188
29k
Scaling GitHub
holman
464
140k
Facilitating Awesome Meetings
lara
57
7.1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Test your architecture with Archunit
thirion
2
2.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
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αʔόϓογϡ؆୯ʹ͑Δ
એ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠