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
パフォーマンスチューニングで Web 技術を深掘り直す
Search
Shunsuke Mano
September 20, 2025
Programming
22
6k
パフォーマンスチューニングで Web 技術を深掘り直す
フロントエンドカンファレンス東京 2025 での発表資料です。
https://fec-tokyo.github.io/2025/
Shunsuke Mano
September 20, 2025
Tweet
Share
More Decks by Shunsuke Mano
See All by Shunsuke Mano
FE エンジニアは Web Platform 動向を追うべきか?
progfay
0
39
Error.prototype.stack の今と未来
progfay
2
640
高度な型付け、どう教える?
progfay
5
2.7k
Provenance in JSR
progfay
1
190
Other Decks in Programming
See All in Programming
KagglerがMixSeekを触ってみた
morim
0
280
The free-lunch guide to idea circularity
hollycummins
0
350
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
390
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
160
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
240
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
440
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
180
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
100
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
990
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
160
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
500
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Tell your own story through comics
letsgokoyo
1
870
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Practical Orchestrator
shlominoach
191
11k
GraphQLの誤解/rethinking-graphql
sonatard
75
11k
We Have a Design System, Now What?
morganepeng
55
8k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
430
Abbi's Birthday
coloredviolet
2
5.6k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.4k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Building Adaptive Systems
keathley
44
3k
Transcript
2025.09.21 | FEC Tokyo 2025 | @progfay パフォーマンスチューニングで Web 技術を深掘り直す
Name: 眞野 隼 輔 ま の しゅんすけ
@progfay ・ 株式会社リクルート所属 (2020 ~) ・ Web Frontend Engineer ・ 普段は Web の動向を追っかけている *この発表は個 人 の 見 解であり、所属する組織の公式 見 解ではありません。
本発表のテーマ パフォーマンスチューニングから得られる学びについて
本発表のテーマ パフォーマンスチューニングから得られる学びについて ではない! 「 手 を動かさないと得られない学びがある」という話
「学び 方 を変えてみよう!」という話
• 勉強がフロントエンドに偏っている • React についての勉強ばかりで、通信の仕組みについて 学ぶ機会がない • 新しくて有名な技術は古い技術よりも 常に 優れていると思っている
• HTTP/ 1 . 1 より HTTP/ 2 , JPEG より WebP • まだ学んでない Web の側 面 に触れたい 想定視聴者
• スピードハッカソン研修の紹介 • パフォーマンスチューニングの何が良いか? • 本学習 方 法の実践について 発表の流れ
https://techblog.recruit.co.jp/article-5841/
スピードハッカソンとは 👨💻 Web Page Server • イメージ: Web フロントエンド版 ISUCON*
* "ISUCON" は、LINEヤフー株式会社の商標または登録商標です。
• イメージ: Web フロントエンド版 ISUCON* スピードハッカソンとは 👨💻 Web Page Server
ISUCON* はここを速くする スピードハッカソンの対象はこっち * "ISUCON" は、LINEヤフー株式会社の商標または登録商標です。
スピードハッカソンの 目 的 👨💻 Web Page Server Browser フロントエンド インフラ
Network Web の構成要素をそれぞれ学ぶ
• 特定のライブラリやフレームワーク、ツールの知識に (極 力 ) 依らない • Pure な HTML
/ CSS / JavaScript で構成された Web サイトを対象とする • リアルワールドさを学ぶことが主 目 的ではない • 競技中のボトルネックには「実際にありそう」も「そうはならんやろ」も両 方 出てくる • Performance Tuning のやり 方 を体系的には教えない • 計測 → 改善のループは実際に 手 を動かして学んだ 方 が早そう スピードハッカソンでやらないこと
• チーム戦 (1 チーム 3 ~ 4 名) • チームごとに環境と
高 速化対象の Web サイトのコードが渡される • Web サイトのパフォーマンスを計測してスコア化する Benchmarker が 用 意されている • 競技中は計測結果がスコアボードに表 示 される • 研修後に全体の振り返りと解説 研修概要
• メディアサイトの 一 覧画 面 っぽいサイト • ページ 自 体が超
長 い • 大 量の画像が含まれている • インタラクションは少ない • 初期状態では Node.js による静的ファイル配信のみ • 最新の Google Chrome で動作すれば OK とする チューニング対象の Web サイト <img> <img> <img> <img> <img> <img> <img> <img> <img> <img> <img> <img>
• Puppeteer と Lighthouse でシナリオを実 行 する 1 . Navigation
2 . 上から下までスクロール 3 . 機能 1 を使う 4 . 機能 2 を使う • Lighthouse の report からスコア算出 Benchmark https://web.dev/articles/lighthouse-user-flows
• 画像サイズが表 示 するサイズよりも 大 きい (表 示 サイズの 8
倍) • 初期ロード時に全ての画像が読み込まれる • 不要なライブラリ (JavaScript, CSS) が含まれている • gzip 圧縮されていない • 謎の激重スクリプトが読み込まれている • etc... ページが遅くなっている原因
1 . Lighthouse で計測した結果を確認する 2 . Diagnostics / Opportunities から改善できそうなものに取り組む
3 . 修正できたらベンチマークを実 行 する 4 . これを繰り返す 競技者はどうやってパフォーマンス改善するか? https://example.com の Diagnostics
• 競技のサポートをする • 「ssh ってどうやるの?」「なにもしてないのにこわれた」 • 技術的な質問に答える • 「HTTP/ 2
化ってどうやればいい?」「gzip 圧縮って何?」 • 改善のヒントを与える • 「画像のファイルサイズを確認してみよう」「indent って実は消しても動くんです」 講師の役割
研修のテーマ 裏テーマ: Web の 奥深さ を知ってもらう 何がパフォーマンスを毀損するかを知ってもらい パフォーマンスを維持するための 文 化醸成
を 目 指す
1 . 楽しい 2 . 普段とは違う 角 度から学べる 3 .
技術の深掘りが求められる 本研修の何が良いか?
• 一 般的な研修は座学が多いため、飽きてしまう • グループワーク & 競争をさせることで、研修参加のモチベーションを引き出す • 研修のマンネリ解消も狙っている •
研修のアンケートの結果、満 足 率が 高 かった • 参加者全員から「この研修には参加意義がある」と評価を頂いた 「楽しい」は正義!
1 . 楽しい 2 . 普段とは違う 角 度から学べる 3 .
技術の深掘りが求められる 本研修の何が良いか?
What's「普段の学び 方 」 自 分の持つ知識を中 心 に、隣接する技術や領域を学ぶ 👨💻 Frontend Backend
Infra Design Browser
What's「普段の学び 方 」 自 分の持つ知識を中 心 に、隣接する技術や領域を学ぶ ✅ ✅ 👨💻
✅ ✅ Frontend Backend Infra Design Browser
What's「普段の学び 方 」 自 分の持つ知識を中 心 に、隣接する技術や領域を学ぶ ✅ ✅ ✅
✅ 👨💻 ✅ ✅ ✅ ✅ Frontend Backend Infra Design Browser
👨💻 Poor High Performance という軸で Sort する
👨💻 High Bottleneck に遭遇する Poor
👨💻 High Poor 解決すると次の Bottleneck に遭遇する ✅
👨💻 High Poor 発 見 → 改善 → 解消を繰り返す ✅
✅ ✅ ✅ ✅ ✅ ✅ ✅
✅ ✅ 👨💻 ✅ ✅ ✅ ✅ ✅ ✅ ✅
✅ ✅ ✅ 👨💻 ✅ ✅ ✅ ✅ 自 分の現在地 Performance という軸 主観的 ・ 相対的 客観的 ・ 絶対的 モチベーションを保ちつつ、普段と違う 角 度から学べる! 興味分野に近い Performance を改善したい
1 . 楽しい 2 . 普段とは違う 角 度から学べる 3 .
技術の深掘りが求められる 本研修の何が良いか?
• 取り扱う問題は実際に動作している Web Application • Lighthouse はパフォーマンス改善の提案をしてくれる • しかし、その通りにしても必ず改善されるわけではない 技術の深掘りが求められる
パフォーマンスを改善するには 技術の深掘り が必要になる
• 初期状態では HTTP/ 1 . 1 を使っているため Lighthouse から指摘される •
多重化やヘッダ圧縮により 高 速になるらしい Diagnostics - Uses HTTP/ 2 HTTP/2 offers many benefits over HTTP/1.1, including binary headers, multiplexing, and server push. ref. https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2
• 初期状態では HTTP/ 1 . 1 を使っているため Lighthouse から指摘される •
多重化、サーバープッシュ、ヘッダ圧縮により 高 速になるらしい Diagnostics - Uses HTTP/ 2 HTTP/2 offers many benefits over HTTP/1.1, including binary headers, multiplexing, and server push. ref. https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2 HTTP/ 2 にすると スコアが下がる 😱
HTTP/ 1 . 1 v.s. HTTP/ 2 (HTTP Level) HTTP/
1 . 1 HTTP/ 2 ブラウザは並列に 6 Connection までしか張れない (HTTP の Head of Line Blocking) 1 Connection 上にリクエストが 多重化される
HTTP/ 1 . 1 v.s. HTTP/ 2 (TCP Level) HTTP/
1 . 1 HTTP/ 2 Request: Connection = 1 : 1 Request: Connection = N : 1 A1 A2 A3 B1 B2 B3 C1 C2 C3 A1 A2 C1 A3 B1 B2 B3 C2 C3
HTTP/ 1 . 1 v.s. HTTP/ 2 (Packet Loss) HTTP/
1 . 1 HTTP/ 2 Connection が分離されているため 他の Connection に影響しない TCP の順序制御により Packet Loss すると全体が遅れてしまう (TCP の Head of Line Blocking) A1 A2 A3 B1 B2 B3 C1 C2 C3 ❌ A2 B, C 完了 A 完了 A3 B1 B2 A, B, C 完了 再送 再送 Lost Lost A1 A2 C1 A3 B1 B2 B3 C2 C3 ❌ HTTP/ 2 は HTTP/ 1 . 1 よりも Packet Loss に弱い
• メディアサイトの 一 覧画 面 っぽいサイト • ページ 自 体が超
長 い • 大 量の画像が含まれている • インタラクションは少ない • 初期状態では Node.js による静的ファイル配信のみ • 最新の Google Chrome で動作すれば OK とする チューニング対象の Web サイト <img> <img> <img> <img> <img> <img> <img> <img> <img> <img> <img> <img> 再 掲
現状 • benchmark では意図的に粗悪な通信環境をシミュレートしている (Network throttling) • 大 きな画像が 大
量に、初期ロード時に読み込まれる 仮説 • パケットロスの発 生 率が 高 くなってしまう • TCP の Head of Line Blocking により 画像読み込みの完了までが遅れてしまう? なぜ HTTP/ 1 . 1 より HTTP/ 2 のほうがスコアが下がったのか?
改善 • 画像のファイルサイズを 小 さくする (表 示 サイズまで縮 小 するなど)
• 初期ロード時には Above the fold のみの読み込みを 行 う (Lazy loading) 結果 • HTTP/ 1 . 1 と HTTP/ 2 で 比 較した結果、スコアに 大 きな違いはなかった • ボトルネックがネットワークではなくなったと考えられる 仮説の検証
• ほとんどの画像が JPEG で配信されており、Lighthouse は WebP に変換することを提案してくる • 実際に変換するとファイルサイズは 60%
ほどに! Opportunities - Serve images in next-gen formats しかし WebP に変換するとスコアが下がる場合も... AVIF と WebP は、従来の JPEG や PNG と 比 較して圧縮率と品質の 面 で優れた画像形式です。 JPEG や PNG ではなくこれらの形式で画像をエンコードすると、 読み込みが速くなり、モバイルデータの使 用 量を抑えることができます。 ref. https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images
• WebP には Block Prediction という 手 法が使われている • decode
したい Block の情報を、decode 済みの周囲の Block を元に予測する • これにより 高 い圧縮率を実現できる • 一 方 で decode 処理は逐次実 行 になってしまう Block Prediction https://web.dev/learn/images/webp#block_prediction
前提 • benchmark では CPU slowdown も 行 なっている •
画像の内在サイズが 大 きい 仮説 • 画像の内在サイズが 大 きいせいで decode 処理の実 行 時間の差が顕著になっている? なぜ WebP にしたらスコアが落ちたのか?
改善 • 画像の内在サイズを 小 さくする (表 示 サイズまで縮 小 するなど)
結果 • JPEG と WebP で 比 較した結果、スコアに 大 きな違いはなくなった • ボトルネックが画像ではなくなったと考えられる なぜ WebP にしたらスコアが落ちたのか?
• 「有名で新しい技術は常に優れているか?」には "No" と答えられる • しかし「それはどんな時か?」と聞かれて答えられる 人 は少ない • 深い知識を得る機会は、能動的に学びに
行 かない限り滅多にない • それこそ実際に 手 を動かさないと遭遇できない 技術の深掘りから得られる学び
知識 知恵 ただ知っている 活 用 できる 記憶する 体験する 技術の深掘り によって
知識は知恵へと昇華される
本研修の何が良いか? 1 . 楽しい 2 . 普段とは違う 角 度から学べる 3
. 技術の深掘りが求められる → 学びのモチベーションを保つ → 学びの軸を相対から絶対に → 知識を知恵に昇華する
Known Unknown Known Unknown Known-Knowns Unknown-Knowns Known-Unknowns Unknown-Unknowns Unkown-Unknowns に遭遇できる機会が
比 較的多いイメージ
• 理解が追いついてなくても開発が進んでしまう時代 • 「なんかわからないけど問題が発 生 した」という場 面 は今以上に増えてくるはず • 問題解決のためには広く深い知恵が必要になってくる
AI 時代でも有効な学習法か?
• 理解が追いついてなくても開発が進んでしまう時代 • 「なんかわからないけど問題が発 生 した」という場 面 は今以上に増えてくるはず • 問題解決のためには広く深い知恵が必要になってくる
AI 時代でも有効な学習法か? Let's 実践!
• まずスピードハッカソンを開催します Let's 実践
• まずスピードハッカソンを開催します ← ハードルめちゃ 高 い! Let's 実践 競技型イベントの開催って超 大
変... (;´Д`) Let's 実践
• 自 作の Web Application のパフォーマンスをチューニングする • 最初は初期表 示 だけをチューニングする
(計測 → 考察 → 改善のループ) • 慣れてきたら難易度を上げてみるのも良い • Lighthouse user flows を使ってユーザー操作もチューニングの対象にする • 想定しうるユーザーのうち、もっとも端末 spec が低そうな環境をシミュレートする Let's 実践 (パフォーマンス編)
• パフォーマンスのような 普段とは違う切り 口 で学ぶ ことが 大 事 • 例えばセキュリティ:
• 攻撃者の視点に 立 ってみる • CTF の Web 問に挑戦してみる • RFC の Security Considerations を読んでみる • 他にも切り 口 はたくさんあるはず! Let's 実践 (別路線編)
• スピードハッカソン研修では 普段とは違う学び 方 」ができる • パフォーマンスという絶対軸で Web の 見
え 方 を変える • 技術の深掘りによって知識は知恵へと昇華される • 結果: 普段触れない技術範囲を学べたり、問題解決能 力 が向上したりする • パフォーマンスやセキュリティなど、普段とは違う切り 口 で Web を捉え直すことで実践できる まとめ