Performanceタブの利用方法（ログインが必要なサイト及びスクロール・クリックなどの操作後のパフォーマンス確認）

## 背景
普段 [Page Speed Insight](https://pagespeed.web.dev/) を利用してページの速度改善方法を検討することが多いのですが、認証が必要なサービスやページ内でのスクロールが重要となるサービスの分析には利用できませんでした。

別タブにてログインした状態で、URLの検証を試みたのですが、ログインしていない状態（ログインページへリダイレクトされる場合）の検証となってしまいました。また、ページ読み込み時の検証はできるのですが、スクロールした際の画像の読み込みがスムーズかどうかの検証はできませんでした。

そこでChrome DevToolsのPerformanceタブを利用することにしました。

ログインした状態で利用することで、認証済みのページを検証することができました。スクロール時の検証も可能です。

## 利用方法

### ページの読み込みを検証

左上のリロードボタンを押すと検証できます。

![スクリーンショット 2024-12-07 21.42.40 01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/1236d13c-411f-be52-49a0-3206fc7df8e6.png)

### スクロール・クリックなどの読み込み後の操作を検証

左上のレコードボタンを押下した後、スクロール・クリックなどの検証したい動作を実施します。

![スクリーンショット 2024-12-07 21.44.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/3199f0f5-cd06-e7bc-60c4-ecb73e428df5.png)

一通りの動作・読み込みが終了したら停止ボタンを押下します。

![スクリーンショット 2024-12-07 21.46.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/df5f2fc9-f87b-ae3c-be70-0fa9668a8abe.png)

## 各種指標の見方

### LCP

Largest Contentful Paintの略で、ページのメインコンテンツ（通常、画像や大きなテキストブロックなど）が読み込まれて、ユーザーに視覚的に表示されるまでの時間です。ユーザーが「表示された」と感じるまでの時間を把握することで、サイトの読み込み速度がUXに与える影響を評価します。

[良好な LCP スコアとは](https://web.dev/articles/lcp?hl=ja#what-is-a-good-lcp-score) によると2.5 秒未満が良好とされています。

![スクリーンショット 2024-11-24 20.20.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/6ae10a85-6ad7-e17c-f468-97b41044cbd4.png)

### CLS

Cumulative Layout Shiftの略で、Webページの表示中に発生するレイアウトの予期しないずれ（視覚的な動き）を測定する指標です。これにより、ユーザーがページを操作中に体験する混乱や不便さを評価します。

[良好な CLS スコアとは](https://web.dev/articles/cls?hl=ja#what-is-a-good-cls-score) によると、0.1未満が良好とされています。

### LCP by phase

[LCPの内訳](https://web.dev/articles/optimize-lcp?utm_source=devtools&hl=ja#lcp-breakdown)によるとLCPには4つの段階があるそうです。パートごとに分けて最適化していく際に利用できます。

![スクリーンショット 2024-11-24 20.19.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/b271e8c5-bff4-6671-4140-5624e0e88986.png)

### LCP request discovery

LCPの対象を早く読み込み開始するためにどうしたら良いかを教えてくれます。
以下の場合、「fetchpriority=high applied」が赤色になっており、優先して読み込む設定にするといいよということを教えてくれています。

![スクリーンショット 2024-11-24 20.20.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/6e91874b-309f-be3f-741a-4e12bd5c66f7.png)

### Render blocking requests

LCP対象のレンダリングを妨げているリクエストを教えてくれます。
遅延読み込みや初期読み込みに必要な箇所はインライン化（HTMLに含める）することにより改善可能です。
以下では、cssやslickライブラリなどが原因として指摘されています。

![スクリーンショット 2024-11-24 20.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/73d68d3a-8d3d-1ab4-3612-b53de0bfa418.png)

### Document request latency

![スクリーンショット 2024-11-24 20.51.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/9892f284-5dad-758a-2a26-3aa7622b3eed.png)

### Viewport not optimized for mobile

![スクリーンショット 2024-11-24 20.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/fe7e1a5e-b767-3555-0acc-fbef0c23345b.png)

### Third parties

外部コード（Google Tag Managerや広告ネットワークなど）の読み込みがページの読み込みを阻害していることを教えてくれます。
不要なものは削除し、必要な者でも遅延読み込みすることで解決できます。

![スクリーンショット 2024-11-24 20.52.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/cc4c0cf1-7413-10aa-fd25-1d8afb3356d0.png)

### INP

Interaction to Next Paint 略で、ユーザーからのアクションに対して視覚的な反応が発生するまでどれくらいのかかったかの指標です。

![スクリーンショット 2024-12-07 21.59.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/d1b63ad4-f612-6bbb-748c-0ace40264357.png)

### INP by phase

3つのフェーズに分けてどれくらい時間がかかっているかが分かります。

[インタラクションを最適化する](https://web.dev/articles/optimize-inp?utm_source=devtools&hl=ja#optimize_interactions) に詳細な対応方法が記載されていました。

![スクリーンショット 2024-12-07 21.59.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/dee11dfc-0dfe-c4e7-ebee-fb5a00aefc8f.png)

### FPS

Frame Per Second の略で、1秒間にブラウザが何回画面の更新を行ったかの指標とのことです。60fpsを下回ると赤色のバーがでます。

![スクリーンショット 2024-11-24 21.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/ede037e6-ceef-5541-9b9d-71f50910a78d.png)

### CPU

CPUがどれだけ稼働しているかを表しています。

![スクリーンショット 2024-11-24 21.03.50のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/ae974d0a-5c1d-2adf-02f5-28076f2511ff.png)

### 画面遷移

時間ごとの画面の状態を表しています。

![スクリーンショット 2024-11-24 21.03.50のコピー2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/55dcb9d3-76da-610d-6ae1-219d0fdf47cc.png)


### Network

Networkでは、各リソースの読み込みにどれだけの時間がかかっているかを確認できます。
左側の Render blocking requests などを開くと自動で対象のリソースを赤枠で教えてくれます。また、ホバーすることでどのフェーズにおいてどれだけの時間を要しているかが分かります。

![スクリーンショット 2024-12-07 21.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/9c4141bf-cfdf-0b95-4cb7-fbad922b6b8e.png)


### Frames

画面の遷移を詳細に確認できます。

![スクリーンショット 2024-12-07 21.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/ab1d1895-fe16-d316-82d5-405d72b442c9.png)


### Main

メインスレッドで行われいる内容を把握できます。

Y軸は、コールスタックの構造を表しています。具体的には、イベントがどのように連鎖しているかを示します。上位に表示される項目が起点で、そこから下に向かって呼び出された関数や処理が順番に並んでいます。この構造により、どのイベントや関数が他の処理をトリガーしたのかを視覚的に追跡できます。

ホバーすると詳細の説明が開きます。

![スクリーンショット 2024-12-07 21.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/a4194b43-cc18-5929-bbea-6f816e563fe7.png)

### Bottom-up

コールスタックのどこに一番時間がかかったのかが分かります。

![スクリーンショット 2024-12-07 21.36.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717486/2095d850-2bae-76d7-488d-1a0fce109242.png)


## 参考にした記事

https://developer.chrome.com/docs/devtools/performance/reference?hl=ja

https://zenn.dev/koki_tech/articles/9deb70d0a9befb