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
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
Search
did0es
May 08, 2026
Technology
330
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
https://stmn.connpass.com/event/390165/
の登壇資料です
did0es
May 08, 2026
More Decks by did0es
See All by did0es
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
1
370
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
shuta13
0
150
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
360
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
8
860
Reconciliationの世界
shuta13
0
0
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2.5k
5分でわかるPreactのVDOMで作るWebエディタ
shuta13
0
270
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
810
codemodとうまく付き合うには
shuta13
0
3k
Other Decks in Technology
See All in Technology
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2k
Databricks における 生成AIガバナンスの実践
taka_aki
1
360
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
3
1.7k
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
310
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
7
4.3k
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
500
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
3
1.1k
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
280
Agentic Web
dynamis
1
190
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
270
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.8k
Reliability in the Age of AI: Engineering for AI Velocity
rrreeeyyy
0
110
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
380
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Language of Interfaces
destraynor
162
27k
Become a Pro
speakerdeck
PRO
31
6k
Done Done
chrislema
186
16k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Skip the Path - Find Your Career Trail
mkilby
1
140
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
330
Transcript
ブラウザの投機的読み込みと 投機ルールAPIを理解し、 Webサービスのパフォーマンスを 最適化する 2026/05/08 did0es
Hirai Shuta | did0es(🗣 ディドス) SWE, Next Experts(Client - TypeScript)
@ CyberAgent, Inc. FEC Tokyo lead organizer & FEC Nagoya adviser For more: did0.es
【本資料のねらい】 ブラウザの投機的読み込み機能を理解して サービスに合わせて選択できるようになる
ブラウザの投機的読み込み 将来実⾏される可能性がある処理を予測して実⾏(投機的実⾏)し、 Webページを早く利⽤できるようにする仕組み。 以下の⽅法で実現: • 先読み:リソースの事前読み込み • 事前レンダリング:⽂書の事前レンダリング • 事前接続:接続ハンドシェイク(の⼀部)の事前実⾏
投機的読み込み機能の種類 1. <link rel="dns-prefetch"> 2. <link rel="preconnect"> 3. <link rel="preload">
4. <link rel="modulepreload"> 5. ⚠ <link rel="prefetch"> 6. ⚠🗑 <link rel="prerender"> 7. 🧪 投機ルール API a. 先読み b. 事前レンダリング
① <link rel="dns-prefetch"> • DNS解決を事前に⾏う ◦ 対象オリジンのドメイン名をIPアドレスに解決するまでの待ち時間を短縮 ◦ DNSキャッシュとは別 •
同⼀オリジンのリクエストではメリットなし ◦ 同⼀オリジンであれば既にコネクションが開いている(ドメインのIP解決済み) • 使い⽅ ◦ 例:<link rel="dns-prefetch" href="https://example.com" /> ◦ HTTPヘッダのLinkでも設定可能: Link: <https://fonts.googleapis.com/>; rel=dns-prefetch
② <link rel="preconnect"> • 接続ハンドシェイクの⼀部またはすべてを事前に⾏う ◦ DNS解決 + α の事前実⾏
◦ HTTPのオリジン:DNS + TCP ◦ HTTPSのオリジン:DNS + TCP + TLS • 同⼀オリジンのリクエストではメリットなし ◦ 同⼀オリジンであれば既にコネクションが開いている(ドメインのIP解決済み) • 使い⽅ ◦ 例:<link rel="preconnect" href="https://example.com" /> ◦ HTTPヘッダのLinkでも設定可能: Link: <https://fonts.googleapis.com/>; rel=preconnect
dns-prefetchとpreconnectの使い分け preconnectの⽅が優秀じゃん!となるが... • 様々なドメインに接続する → dns-prefetch ◦ 全てのドメインのDNS解決だけ先に済ませる • あるドメインへの接続が必須
→ preconnect ◦ 全てのドメインのDNS解決 + αまでやると重い ◦ 重要なドメインに対して⾏う
③ <link rel="preload"> • 指定したリソースのダウンロードとキャッシュを⾏う ◦ ブラウザがレンダリングを開始する前に必要であることを⽰唆 ◦ 実⾏はしない •
使い⽅ ◦ 例:<link rel="preload" href="style.css" as="style" /> ◦ as属性にはリソースの種類(fetch, font, image, script, style, trackが設定可能) ◦ MIMEタイプによる制御や、CORSによる取得(fontファイルなどで利⽤)、 media属性によるレスポンシブな事前読み込みが可能
④ <link rel="modulepreload"> • 指定したJavaScriptモジュールをダウンロード‧コンパイル‧ モジュールマップに格納し、実⾏できるようにする ◦ モジュールマップ:モジュール間の読み込みの状態を管理するもの ◦ JavaScriptモジュール特化のpreload
+ α • 使い⽅ ◦ 例:<link rel="modulepreload" href="main.js" />
modulepreloadとpreloadの違い • as属性は必要なし。scriptとして解釈される ◦ script関連(serviceworkerなど)の他の値も指定できる • ダウンロード後にただキャッシュするのではなく、 モジュールマップにコンパイルする • 指定したモジュールだけでなく、モジュールの依存関係も事前に読み込む
⑤ ⚠ <link rel="prefetch"> • 指定したリソースのダウンロードとキャッシュを⾏う ◦ ユーザーの操作の中で必要であることを⽰唆 ◦ HTTPキャッシュとしてキャッシュ
◦ 実⾏はしない • 使い⽅ ◦ 例:<link rel="prefetch" href="https://news.example/article" />
prefetchとpreload系の違い • prefetch ◦ 優先度:低 ◦ ページを利⽤するとき将来的に必要 • preload ◦
優先度:⾼ ◦ ページを表⽰するときに必要
⑥ ⚠🗑 <link rel="prerender"> • 指定したリソースのダウンロード後、レンダリング結果をキャッシュする ◦ 画⾯外でページを開いている状態 ◦ キャッシュは5分間有効
• 使い⽅ ◦ 例:<link rel="prerender" href="/next-page" />
prerenderとprefetchが抱える問題 • Cache-Controlヘッダーにブロックされる可能性がある ◦ no-cache, no-storeなど • ブラウザのキャッシュ分割で無効になる ◦ 同⼀ドメインでもキャッシュ共有できない:
あるリソースに対してa.example.comでprerender/prefetchした結果は、 b.example.comから⾒えない • prerenderのセキュリティ ◦ プロセス間のアクセス制御が⼗分に考慮できていない
⑦ 🧪 投機ルールAPI • 前述の問題を解決するAPI • 先読み:prefetchの代替 ◦ ドキュメント単位でメモリにキャッシュ •
事前レンダリング:prerenderの代替 ◦ 先読み + αでレンダリング ◦ ⾮表⽰タブに読み込んでメモリにキャッシュ • 使い⽅ ◦ 投機ルールをJSON形式で記述 ▪ <script type="speculationrules">にインラインで記述 ▪ Speculation-Rulesヘッダーで記述したファイルを指定
先読みの投機ルールの記述例 "prefetch": [ { "urls": ["next.html", "next2.html"], "requires": ["anonymous-client-ip-when-cross-origin"], "referrer_policy":
"no-referrer" } ]
事前読み込みの投機ルールの記述例 "prerender": [{ "where": { "href_matches": "/*" }, "eagerness": "moderate"
}]
投機ルールAPIを使う上での注意(※) • 先読み ◦ GETリクエストが⾶ぶ ▪ サーバー側がGETリクエスト駆動で何か処理する場合動いてしまう ◦ キャッシュを表⽰するため、リアルタイム性が損なわれる ▪
サーバー側でレンダリングされた結果とユーザーの操作結果との不整合 • 事前レンダリング ◦ ユーザーが操作したかのような動作をする場合がある ▪ 画像の読み込み、トラッキングスクリプトの実⾏など ◦ JSによる副作⽤が他のページに⼲渉 ▪ ブラウザのストレージを使う処理など ※ prefetch / prerenderでもこれらに注意が必要
投機的読み込み機能の使い分け • 汎⽤的 ◦ dns-prefetch ◦ preconnect • アセット多め ◦
preload • SPA:管理画⾯ ◦ modulepreload ◦ prefetch(投機ルールAPIの先読み) • MPA:メディア、検索サイト ◦ 投機ルールAPI
ありがとうございました