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
フロントエンドから触れるHTTPパフォーマンス
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Tatsuki Sugiura
August 20, 2025
Technology
0
13
フロントエンドから触れるHTTPパフォーマンス
Tatsuki Sugiura
August 20, 2025
Tweet
Share
More Decks by Tatsuki Sugiura
See All by Tatsuki Sugiura
103 Early Hints
sugi_0000
1
760
No more parser-inserted js - defer / async を今こそ完全に理解する
sugi_0000
0
81
FLOSSむかしばなし
sugi_0000
0
24
和暦 & 漢数字 gem
sugi_0000
0
36
FLOSS とフリーカルチャーの流れ
sugi_0000
0
24
Git overview
sugi_0000
0
39
飲む方の茶会
sugi_0000
0
23
Other Decks in Technology
See All in Technology
プロジェクトマネジメントをチームに宿す -ゼロからはじめるチームプロジェクトマネジメントは活動1年未満のチームの教科書です- / 20260304 Shigeki Morizane
shift_evolve
PRO
1
160
タスク管理も1on1も、もう「管理」じゃない ― KiroとBedrock AgentCoreで変わった"判断の仕事"
yusukeshimizu
5
2.4k
JAWS Days 2026 楽しく学ぼう! 認証認可 入門/20260307-jaws-days-novice-lane-auth
opelab
10
1.7k
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.5k
聲の形にみるアクセシビリティ
tomokusaba
0
160
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.1k
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
9
1.5k
組織全体で実現する標準監視設計
yuobayashi
2
470
事例に見るスマートファクトリーへの道筋〜工場データをAI Readyにする実践ステップ〜
hamadakoji
1
270
ナレッジワーク IT情報系キャリア研究セッション資料(情報処理学会 第88回全国大会 )
kworkdev
PRO
0
160
[JAWS DAYS 2026]私の AWS DevOps Agent 推しポイント
furuton
0
130
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
2.9k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
130
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Abbi's Birthday
coloredviolet
2
5.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
150
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
300
Building Flexible Design Systems
yeseniaperezcruz
330
40k
From π to Pie charts
rasagy
0
150
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Ruling the World: When Life Gets Gamed
codingconduct
0
170
Information Architects: The Missing Link in Design Systems
soysaucechin
0
820
30 Presentation Tips
portentint
PRO
1
250
Transcript
フロントエンドから触れる HTTPパフォーマンス 2025-08-20 Tatsuki Sugiura <
[email protected]
> <
[email protected]
>
自己紹介 - sugi - Tatsuki Sugiura • 現在 Repro Inc.
で Booster という Web サイト高 速化ツールの開発をしています • 個人では RoR を使った開発や和暦gem とか • ESR の 「ハッカーになろう」から OSS活動をはじめる • 過去に OSDN や スラド (/.j) の開発・運営 • お茶が大好きです!
今日のトピック • 申し訳ない。あんまりモダンJS環境向けの話ではないです! ◦ でも使えるところはあると思う • ページが表示されるまでHTTPの通信復習 • 実はブラウザからHTTP通信の順序に介入する方法あるよ •
コントロールのための具体的方法 • 今日話さないこと ◦ プロトコルの詳細 (パケット, RT, フレーム)
ページが表示されるまで (1) • ページが読み込みから表示完成までに起こっていること ◦ HTML の解釈 ◦ サブリソースの転送
◦ JS の実行
ページが表示されるまで (2) - HTMLパースとDOM構築 HTML stream <html> <head> <meta charset=....
Web Server Tokenizer Tree Construction <html> <head> <meta… DOM Tree html head meta link body
ページが表示されるまで (3) • HTMLは流れてくるものを随時反映 • サブリソースは(基本的には)出現したら転送開始 HTML転送 CSS転送 JS転送 JS実行
画像転送
ページが表示されるまで (4) - レンダリングパス • レンダリングするには以下が必要 ◦ HTML DOM Tree
◦ CSSOM Tree ◦ Sync JS (parser-inserted js) の実行 • HTML は順次反映できるが、 CSS と JS は全体を読みきらない と利用できない • CSS は基本的にその時点でレンダリングをブロックする • Sync JS の実行は先行するレンダーブロッキング CSS の解釈後 まで待たれる (転送は先にできるが、実行はCSS解釈後) • 画像は随時読み込まれる
早くページを表示するには • First view に必要なものを如何に早く読み込むか • 適切な順でサブリソースを読み込む • HTML の後ろにある要素でも、重要なものは早めに読みたい
◦ (例) LCP 画像 • ページ内のサブリソースの依存関係は複雑なため、表示されない ものでも結果的に First View のレンダリングに必要なケースはま まある -> 読み込み順が重要!
どうやって順序をコントロールするの? # 定番で言われること • そもそも HTML上の順序を適切にする ◦ ただし、ブラウザは必ずしも発見次第リクエストするわけではない • 不要なブロッキング要素を置かない
◦ 不要なブロッキングCSSを置かない ◦ JS に適切に asyncをつける # おさえて置くと良いトピック • Priority (Fetch Priority) • Resource Hints (Preload) • Lazy loading (asyc, loading) - 今回話しません
Priority / Fetch priority • ページに必要なリソースの読み込み優先度 • 優先度は複数層で管理されている ◦ ↓
HTML上の指定 ◦ ↓ ブラウザ内の管理 ◦ HTTPのプロトコル上の指定 • HTML属性をつけることで HTTP のプロトコル上の優先度を制御 可能
優先度はなぜ必要? - 並列の定番の落とし穴 • 今のHTTPではリソースを複数ストリームで並列にロードする • もし優先度が同じならすべてを発見次第同時にリクエスト • 帯域は有限なので競合する •
競合するものを並列に 処理にすると結果的に 全てが遅くなる
Priority in browsers • リソースごとに優先度を持つ ◦ Lowest - Low -
Medium - High - Highest の 5段階 • 手軽に Devtools で確認できます
Fetch Priority HTML Attribute • fetchPriority 属性を追加するだけ ◦ 3段階 (auto/low/high)
• 初期表示に必要なものだけに high をつける • 要らないものに low • 全部 high にすれば良いというわけ ではないことに注意。余計遅くなる <div class=”carousel”> <img src=”hero1.jpg” fetchPriority=”high” class=”active”> <img src=”item2.jpg” fetchPriority=”low”> <img src=”item3.jpg” fetchPriority=”low”> <img src=”item4.jpg” fetchPriority=”low”> </div>
Fetch Priority with JavaScript • RequestInit に priority を指定可能 ◦
fetch() ◦ new Request() • コンテンツ表示用APIと、バックグラ ウンド通信APIなどで priority を使い 分けられる fetch(‘http://localhost/items’, { priority: ‘high’ }); new Request( ‘http://localhost/status-ping’, {priority: ‘low’} );
HTTP Priority - プロトコル側の機能 • HTTP ストリームは Priority を持っていて優先度が高いものが優 先される
(ことになっている) • ブラウザ内で管理している優先度からマッピング • HTTP/2 は優先度ツリー, HTTP/3 は優先度とincremental https://calendar.perfplanet.com/2022/http-3-prioritization-demystified/
Resource Hints (Preload) • HTML の Link タグで先に読み込むべきリソースを指示 • LCP
画像など実際に利用するHTMLタグが後ろのものを、先にダ ウンロードしておくことができる • CSS, JS, Font など色々使える • ただ、Head 上の方にある js など、すぐに読み込みが始まるもの を指定する意味はあまりない • 不必要なものを指定すぎないこと! 余計遅くなる。 ◦ ブラウザによっては上限を管理している <link rel="preload" href="/lcp-image.jpg" as="image" fetchPriority=“high”>
Resource Hints 補足 • ブラウザによって、優先度の ポリシーが違う • as=”image” の場合は、標 準の
Priority が低い ◦ Chrome だけあげられる https://calendar.perfplanet.com/2022/http-3-prioritizat ion-demystified/
おまけ: もっと効果的なプロトコルレベル Preload • HTML の link rel=”preload” ではなく、Link
ヘッダでも同様の 指定ができる ◦ Chrome だとここでも priority が効く • さらに、103 Early Hints を使えば遥かに早い段階でロードを開 始できる ◦ この場合はメインの CSS や JS のロードをしておくとよい ◦ HTML 内と使い分けると良さそう ◦ 103 自体の悩ましさはある
Lazy load / Async script • 画像や iframe を viewport
に入るまで読み込みを遅延する • これにより、必要なものを先に読み込める • そろそろ JS 版の lazy load を使うのはやめよう <img src=”item.jpg” loading=”lazy”> <script src=”module.js” type=”module”></script> <script src=”src.js” async></script> <script src=”legacy.js” defer></script> • モダンなスクリプトなら module にすると自動で非同期に • とにかく Parser-inserted script を避ける