7.1 パフォーマンス記録・分析

Performance Recording and Analysis

Performanceパネルは、ページのランタイムパフォーマンスを詳細に分析するツール。JavaScript実行、レンダリング、レイアウト計算などの処理時間を可視化し、パフォーマンスボトルネックを特定できる。

Performanceパネルの概要

Performanceパネルでは、一定時間のブラウザの動作を記録し、何が起きているかを詳細に分析できる。

パネルを開く

  • F12 → Performanceタブ
  • Ctrl+Shift+E(記録開始のショートカット)

主な用途

分析対象 確認できること
ページ読み込み 初期表示までの処理、レンダリングブロック要因
ランタイム スクロール、アニメーション、ユーザー操作時のパフォーマンス
JavaScript実行 関数の実行時間、コールスタック
レンダリング レイアウト、ペイント、コンポジットの負荷

記録の開始

手動記録

操作手順

  1. Performanceパネルを開く
  2. ●(Record)ボタンをクリック、またはCtrl+E
  3. 分析したい操作を実行(スクロール、クリック等)
  4. Stopボタンをクリック、またはCtrl+E

ページ読み込みの記録

操作手順

  1. Performanceパネルを開く
  2. 🔄(Reload)ボタンをクリック、またはCtrl+Shift+E
  3. ページがリロードされ、自動的に記録開始
  4. 読み込み完了後、自動的に停止

記録オプション

歯車アイコンで設定可能。

オプション 説明
Disable JavaScript samples JSコールスタックを記録しない(オーバーヘッド軽減)
Enable advanced paint instrumentation ペイントの詳細情報を記録
Network throttling ネットワーク速度を制限
CPU throttling CPU速度を制限(4x, 6x slowdown)
モバイル環境のシミュレート CPU throttlingを4x〜6xに設定すると、モバイルデバイスに近いパフォーマンスをシミュレートできる。

パネルの構成

記録後、以下のセクションが表示される。

Overview(概要)

上部のグラフ。全体の傾向を把握できる。

  • FPS(緑): フレームレート。高いほど良い。赤いバーはフレーム落ち
  • CPU(色分け): CPU使用率。色は処理の種類を示す
  • NET: ネットワークリクエストのタイミング
  • Screenshots: 画面の変化(有効時)

Flame Chart(フレームチャート)

中央のメインセクション。処理の詳細を時系列で表示。

  • Network: ネットワークリクエスト
  • Frames: 各フレームのレンダリング
  • Timings: マーカー(DCL、FP、FCP、LCP等)
  • Main: メインスレッドの処理
  • Compositor: コンポジタースレッド
  • Raster: ラスタライズスレッド
  • GPU: GPU処理

Details(詳細)

下部のパネル。選択した項目の詳細情報を表示。

Flame Chartの読み方

色の意味

処理の種類
JavaScript(Scripting)
レンダリング(Layout、Style計算)
ペイント(Paint、Composite)
ロード(Parse HTML、Parse Stylesheet)
その他(Idle、System)

縦方向の構造

Flame Chartは上から下へコールスタックを表現。上の処理が下の処理を呼び出している。

横方向の構造

時間軸。バーの幅が処理時間を表す。幅が広いほど時間がかかっている。

ナビゲーション

  • ズーム: マウスホイール、またはOverviewで範囲選択
  • パン: ドラッグ、または矢印キー
  • 選択: クリックで詳細表示
  • W/A/S/D: ズームイン/左/ズームアウト/右

重要なタイミングマーカー

Timingsトラックに表示される主要な指標。

マーカー 正式名称 説明
DCL DOMContentLoaded HTML解析完了、DOM構築完了
L Load すべてのリソース読み込み完了
FP First Paint 最初のピクセルがペイントされた時点
FCP First Contentful Paint 最初のコンテンツ(テキスト、画像等)が表示された時点
LCP Largest Contentful Paint 最大のコンテンツ要素が表示された時点
Core Web Vitals LCPはGoogleのCore Web Vitalsの一つ。良好なLCPは2.5秒以下。FCP、LCPの改善はSEOにも影響する。

ボトルネックの特定

Long Tasks(長いタスク)

50ms以上かかるタスクは「Long Task」として赤いフラグで表示される。メインスレッドをブロックし、UIのレスポンスを低下させる。

レイアウトスラッシング

Layout(紫)が頻繁に発生している場合、強制同期レイアウトが起きている可能性がある。

// 悪い例:レイアウトスラッシング
for (let i = 0; i < elements.length; i++) {
  // offsetWidthの読み取りでレイアウト強制
  const width = elements[i].offsetWidth;
  // styleの書き込みでレイアウト無効化
  elements[i].style.width = width + 10 + 'px';
}

// 良い例:読み取りと書き込みを分離
const widths = elements.map(el => el.offsetWidth);
elements.forEach((el, i) => {
  el.style.width = widths[i] + 10 + 'px';
});

フレーム落ち

FPSグラフの赤いバーはフレーム落ちを示す。60fpsを維持するには、各フレームの処理を16.67ms以内に収める必要がある。

JavaScript実行時間

黄色のバーが広い場合、JavaScriptの実行に時間がかかっている。Mainトラックをクリックして、どの関数が原因かを特定する。

Summaryタブ

記録全体または選択範囲の統計を表示。

カテゴリ別の時間

カテゴリ 含まれる処理
Loading ネットワーク、HTMLパース
Scripting JavaScript実行、イベントハンドラ
Rendering スタイル計算、レイアウト
Painting ペイント、コンポジット
System ブラウザ内部処理
Idle 待機時間

Bottom-Up / Call Tree / Event Log

詳細パネルのタブで異なる視点から分析できる。

Bottom-Up

最も時間がかかった処理から順に表示。「どの処理が重いか」を素早く把握できる。

  • Self Time: その関数自身の実行時間
  • Total Time: 子関数を含めた合計時間

Call Tree

コールスタックをツリー形式で表示。「なぜその処理が呼ばれたか」を追跡できる。

Event Log

イベントを時系列で一覧表示。フィルタで特定の種類のイベントだけ表示可能。

分析のTips

シークレットモードで計測

拡張機能の影響を排除するため、シークレットモードでテスト。

複数回計測

結果はばらつくため、複数回計測して傾向を把握する。

CPU throttlingを使用

開発マシンは高性能なことが多い。4x〜6x slowdownで実際のユーザー環境に近づける。

記録を保存・共有

記録を右クリック → Save profileでJSON形式で保存。Load profileで読み込み可能。チームでの共有やバグレポートに活用。

console.time()との連携

コード内でconsole.time()を使用すると、Timingsトラックにマーカーが表示される。特定の処理区間を計測するのに便利。

console.time('データ処理');
// ... 処理 ...
console.timeEnd('データ処理');
参考文献
[1] Analyze runtime performance - Chrome DevTools. developer.chrome.com
[2] Performance features reference - Chrome DevTools. developer.chrome.com
[3] Rendering performance - web.dev. web.dev