Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Priorityを制するものはローディングを制す
Search
Edward Fox
September 26, 2023
Technology
850
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Priorityを制するものはローディングを制す
2023/09/26 We Are JavaScripters! @42nd
Edward Fox
September 26, 2023
More Decks by Edward Fox
See All by Edward Fox
Lambda@Edgeを利用したサードパーティJavaScriptのカナリアリリース / Canary release using Lamdba@Edge
edwardkenfox
0
150
AWS re:Invent 2019 / Hackathon for Good 参加録
edwardkenfox
2
650
Repro basketball club
edwardkenfox
0
310
Introduction to UX Optimizer
edwardkenfox
0
170
フロントエンド開発の落とし穴 / Fallacies of Client Side Programming (2019ver)
edwardkenfox
0
380
僕とprototypeとJSONで / Me and prototype down by the JSON
edwardkenfox
0
200
クライアントサイド開発の落とし穴 / Fallacies of Client Side Programming
edwardkenfox
0
530
Beacon API ことはじめ 〜そしてkeepalive fetchへ〜 / Beacon API The Basics
edwardkenfox
0
1.3k
window.windowとは何か / What is window window
edwardkenfox
1
290
Other Decks in Technology
See All in Technology
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
13k
AIで選択肢が広がった組織設計の理想と現実
konifar
15
6.5k
AI秘書と毎日働くのはもう当たり前。開発以外の業務に足りない機能をどう埋める?
minorun365
PRO
4
1.9k
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
160
ガチで放置できるClaude Code実行環境の作り方.pdf
lamaglama39
5
9.9k
自宅サーバと脆弱性
masakiokuda
1
120
ひとりで始めた AI駆動開発、チームに広げて何が変わったのか
kenichiodo
0
120
局所最適は悪ではない。壊れているのは指標です。量と質を同時に見る先行指標の設計
recruitengineers
PRO
3
1.3k
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
3
440
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
790
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
570
AIコーディングエージェント開発_全体像
happysamurai294
0
110
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Music & Morning Musume
bryan
48
7.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
850
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
320
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Transcript
Priorityを制するものは ローディングを制す Edward Fox 2023/09/26 We Are JavaScripters! @42nd
はじめに • Reproという会社で「Repro Booster」というプロダクトの企画・開発をやってます ◦ 「タグを入れるだけでサイトが速くなる」というサービス ◦ ServiceWorkerとか色々使って、コンテンツの先読みや最適化を自動で行う • コンテンツの自動最適化を図っていく上で、リクエストのPriorityを詳しく理解する
必要があったので、そこで学んだことについて話します
ローディングの優先順位
ローディングの優先順位
ローディングの優先順位
ローディングの優先順位 限られた帯域を利用して どのリソースをどういう順番・ 優先順位でダウンロードし 利用可能な状態にすべきか (≠ JSの実行順序)
ローディングの優先順位 ・CSSとスクリプトはどっちが大事? ・ロゴ画像とLCP画像はどっちが優先? ・defer1.jsとdefer2.jsはどっちが先? ・遅延読み込みの画像が viewport内に 入ってたら優先する? ・asyncはdeferより後回しでOK? ・コンテンツを書き換える可能性の ある
fetch() はどう扱う?
ローディングの優先順位 = Priority ・CSSとスクリプトはどっちが大事? ・ロゴ画像とLCP画像はどっちが優先? ・defer1.jsとdefer2.jsはどっちが先? ・遅延読み込みの画像が viewport内に 入ってたら優先する? ・asyncはdeferより後回しでOK?
・コンテンツを書き換える可能性の ある fetch() はどう扱う?
• Priority Hints ◦ Renderer側の制御(ブラウザのタブ、JSランタイム) • Priority Header ◦ ネットワーク側の制御
• 文字通り、通信の「優先度」を制御するための情報 • 完全な制御は担保されず、文字通り「ヒント」を提供する程度のもの Priority をコントロールする (1)
Priority をコントロールする (1) ブラウザ Renderer Process Browser Process Server
Priority をコントロールする (1) ブラウザ Renderer Process Browser Process Server Priority
Header (frame) Priority Hints
Priority をコントロールする (1) ブラウザ Renderer Process Browser Process Server Priority
Hints Priority Header (frame)
• クライアントからサーバーにリソースの優先度を伝えるための情報 • HTTP/2ではPriorityフレームという形でストリームの優先度を制御するものとし て存在していたが、RFCによるとサーバー側の実装が進まなかったとして deprecatedされた • HTTP/3ではPriorityヘッダとして実現された ◦ 0-7の
urgency と boolean の increment という2つのフィールドで構成される ◦ 優先度が変わったときのために Priority Update フレームというのも存在する Priority Header/Frame (1)
Priority Header/Frame (2)
Priority Header/Frame (2)
• サーバー側の実装(ヘッダ、フレームの解釈)に大きく依存する • ブラウザ側の送信方法もだいぶ違う ◦ Safari/Firefox は HTTPヘッダとして送る ◦ Chrome
はヘッダではなく PRIORITY_UPDATE フレームとして送る Priority Header/Frame (3)
Priority をコントロールする (2) ブラウザ Renderer Process Browser Process Server Priority
Header (frame) Priority Hints
Priority をコントロールする (2) ブラウザ Renderer Process Browser Process Server Priority
Hints Priority Header (frame)
• <img fetchpriority=”high”> と記述することでリソースの読み込み優先度を制御する • LCPを上げる施策として割と有効 ◦ LCP = Largest
Contentful Paint • linkとかiframe要素にも使えるので、必要に応じて画像以外にも付与するのが吉 ◦ ただしCSSは基本的にどのブラウザでも(そのブラウザが持つ優先度制御の中で)最優先されるので、全部の <link rel=stylesheet> に fetchPriority をつけて回る作業は不要 Priority Hints (1): fetchPriority
Priority Hints (2): fetch API • fetch(url, { priority: ‘high’
}) と書くことで通信の優先度を制御できる • 画像などの要素に限らず、Fetch API を利用し通信を行う際に指定できる • high, low, auto が指定可能(無指定 = auto) • Firefox, Safari では非対応 • 用途がハッキリしたユースケース以外は無指定(auto)で良さそう
ブラウザ間の差 ( js )
ブラウザ間の差 ( image )
ブラウザ間の差 ( image )
ブラウザ間の差 ( image )
• Webサイトのパフォーマンスを考える上でローディングの優先順位は重要 • Priority について理解してローディングを最適化しよう • まずは fetchPriority の活用から ◦
Safari リリース版にそのうち載る...と信じましょう • <img> の loading=lazy や decoding=async などもあります まとめ
このあたりのキーワードに引っかかる人はぜひ懇親会でお話しましょう 🚀 • ServiceWorker • HTTP, CDN • Resource Hints,
Priority Hints • パフォーマンス, Core Web Vitals • プロダクトマネジメント, 新規事業, データ分析・統計 Let’s talk!
Additional Resources • WICG/priority-hints – Priority Hints • Optimizing resource
loading with the Fetch Priority API • LCP attribution: a fetchpriority breakdown • fetch() global function • HTTP/3 Prioritization Demystified • Adopting a new approach to HTTP prioritization