Repository navigation
Expand file tree
/
Copy pathindex.md
More file actions
167 lines (126 loc) · 13.1 KB
/
Copy pathindex.md
File metadata and controls
167 lines (126 loc) · 13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
---
title: PerformanceResourceTiming
slug: Web/API/PerformanceResourceTiming
l10n:
sourceCommit: 40fa68f80d38ba7142d47f52cdd0960325d63a44
---
{{APIRef("Performance API")}}{{AvailableInWorkers}}
**`PerformanceResourceTiming`** インターフェイスは、アプリケーションのリソースの読み込みに関する詳細なネットワークタイミングデータの取得と分析を可能にします。アプリケーションはタイミングメトリックを使用して、{{domxref("XMLHttpRequest")}}、{{SVGElement("SVG","SVG 要素")}}、画像、スクリプトなどの特定のリソースを取得するのにかかる時間を判断できます。
{{InheritanceDiagram}}
## 解説
このインターフェイスのプロパティは、リダイレクトの開始時刻と終了時刻、フェッチの開始時刻、DNS ルックアップの開始時刻と終了時刻、レスポンスの開始時刻と終了時刻などのネットワークイベントに対する高解像度タイムスタンプを含むリソース読み込みタイムラインを作成します。さらに、このインターフェイスは、取得したリソースのサイズや取得を開始したリソースの種類に関するデータを提供する他のプロパティを使用して {{domxref("PerformanceEntry")}} を拡張します。
### 一般的なリソースタイミングメトリクス
このインターフェイスのプロパティを使用すると、特定のリソースタイミングメトリックスを計算することができます。一般的な使用される用途は次のとおりです。
- TCP ハンドシェイク時間の計測 (`connectEnd` - `connectStart`)
- DNS ルックアップ時間の計測 (`domainLookupEnd` - `domainLookupStart`)
- リダイレクト時間の計測 (`redirectEnd` - `redirectStart`)
- 中間リクエスト時間の計測 (`firstInterimResponseStart` - `finalResponseHeadersStart`)
- リクエスト時間の計測 (`responseStart` - `requestStart`)
- 文書のリクエスト時間の計測 (`finalResponseHeadersStart` - `requestStart`)
- TLS ネゴシエーション時間の計測 (`requestStart` - `secureConnectionStart`)
- フェッチ時間の計測(リダイレクトなし) (`responseEnd` - `fetchStart`)
- サービスワーカー処理時間の計測 (`fetchStart` - `workerStart`)
- コンテンツが圧縮されていたかのチェック (`decodedBodySize` が `encodedBodySize` と同じにならない)
- ローカルキャッシュがヒットしたかどうかのチェック (`transferSize` が `0` になる)
- 最新の高速プロトコルが使用されているかどうかのチェック (`nextHopProtocol` が HTTP/2 または HTTP/3)
- リソースがレンダーブロッキングであることのチェック (`renderBlockingStatus`)
### リソースバッファーサイズの管理
デフォルトで、リソースタイミングの項目は 250 件のみバッファーに保存されます。情報については、リソースタイミングガイドの[リソースバッファーサイズ](/ja/docs/Web/API/Performance_API/Resource_timing#リソースバッファーサイズの管理)を参照してください。
### オリジン間のタイミング情報
リソースタイミングプロパティの多くは、リソースがオリジン間リクエストであった場合に `0` または空文字列を返すよう制約されています。オリジン間のタイミング情報を見るためには、HTTP の {{HTTPHeader("Timing-Allow-Origin")}} レスポンスヘッダーを設定する必要があります。
ウェブページ自体とは異なるオリジンからリソースを読み込む際、デフォルトで `0` が返されるプロパティは、`redirectStart`, `redirectEnd`, `domainLookupStart`, `domainLookupEnd`, `connectStart`, `connectEnd`, `secureConnectionStart`, `requestStart`, `responseStart` です。
例えば、`https://developer.mozilla.org` にタイミングリソースを見ることを許可するには、オリジン間リソースで次のものを送信する必要があります。
```http
Timing-Allow-Origin: https://developer.mozilla.org
```
## インスタンスプロパティ
### `PerformanceEntry` からの継承
このインターフェイスは、以下のように修飾し制約することによって、リソースパフォーマンス項目型の {{domxref("PerformanceEntry")}} プロパティを拡張します。
- {{domxref("PerformanceEntry.duration")}} {{ReadOnlyInline}}
- : {{domxref("DOMHighResTimeStamp","timestamp")}} プロパティで {{domxref("PerformanceResourceTiming.responseEnd","responseEnd")}} と {{domxref("PerformanceEntry.startTime","startTime")}} の差を返します。
- {{domxref("PerformanceEntry.entryType")}} {{ReadOnlyInline}}
- : `"resource"` を返します。
- {{domxref("PerformanceEntry.name")}} {{ReadOnlyInline}}
- : このリソースの URL を返します。
- {{domxref("PerformanceEntry.startTime")}} {{ReadOnlyInline}}
- : リソースのフェッチを始めた時刻の {{domxref("DOMHighResTimeStamp","timestamp")}} を返します。この値は {{domxref("PerformanceResourceTiming.fetchStart")}} と等価です。
### タイムスタンプ
このインターフェイスは、以下のタイムスタンププロパティに対応しています。図に示すように、リソースのフェッチに記録される順番で掲載されています。アルファベット順の一覧は、左のナビゲーションに掲載されています。

- {{domxref('PerformanceResourceTiming.redirectStart')}} {{ReadOnlyInline}}
- : リダイレクトを開始するフェッチの開始時刻を表す {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.redirectEnd')}} {{ReadOnlyInline}}
- : 最後のリダイレクトのレスポンスの最後のバイトを受信した直後の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.workerStart')}} {{ReadOnlyInline}}
- : サービスワーカースレッドが既に実行されている場合は {{domxref("FetchEvent")}} を配信する直前、実行されていない場合はサービスワーカースレッドを始める直前の {{domxref("DOMHighResTimeStamp")}} を返します。リソースがサービスワーカーに介入されない場合、このプロパティは常に 0 を返します。
- {{domxref('PerformanceResourceTiming.fetchStart')}} {{ReadOnlyInline}}
- : ブラウザーがリソースのフェッチを始める直前の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.domainLookupStart')}} {{ReadOnlyInline}}
- : ブラウザーがリソースのドメイン名検索を始める直前の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.domainLookupEnd')}} {{ReadOnlyInline}}
- : ブラウザーがリソースのドメイン名検索を完了した直後の時刻を表す {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.connectStart')}} {{ReadOnlyInline}}
- : ブラウザーがリソースを取得するためにサーバーとの接続を始める直前の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.secureConnectionStart')}} {{ReadOnlyInline}}
- : ブラウザーが現在の接続を保護するためにハンドシェイク処理を開始する直前の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.connectEnd')}} {{ReadOnlyInline}}
- : ブラウザーがリソースを取得するためにサーバーとの接続を完了した直後の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.requestStart')}} {{ReadOnlyInline}}
- : ブラウザーがサーバーからリソースのリクエストを始める直前の {{domxref("DOMHighResTimeStamp")}} です。
- {{domxref('PerformanceResourceTiming.firstInterimResponseStart')}} {{ReadOnlyInline}}
- : {{domxref("DOMHighResTimeStamp")}} で、中間レスポンス(100 Continue や 103 Early Hints など)の時刻を表します。
- {{domxref('PerformanceResourceTiming.responseStart')}} {{ReadOnlyInline}}
- : ブラウザーがサーバーからレスポンスの最初のバイトを受け取った直後の {{domxref("DOMHighResTimeStamp")}} です(中間レスポンスである可能性があります)。
- {{domxref('PerformanceResourceTiming.finalResponseHeadersStart')}} {{ReadOnlyInline}}
- : {{domxref("DOMHighResTimeStamp")}} で、中間レスポンス時間を経た後の、最終ヘッダー(200 Success など)のレスポンス時刻を表します。
- {{domxref('PerformanceResourceTiming.responseEnd')}} {{ReadOnlyInline}}
- : ブラウザーがリソースの最後のバイトを受信した直後、またはトランスポート接続が閉じられる直前の、どちらか早い方の {{domxref("DOMHighResTimeStamp")}} です。
### 追加のリソース情報
さらに、このインターフェイスは、リソースに関するより詳細な情報を含む以下のプロパティを公開します。
- {{domxref("PerformanceResourceTiming.contentType")}} {{ReadOnlyInline}}
- : 取得されたリソースの MIME タイプを、最小化および標準化した形式で表す文字列です。
- {{domxref('PerformanceResourceTiming.decodedBodySize')}} {{ReadOnlyInline}}
- : メッセージ本体のフェッチ(HTTPまたはキャッシュ)から受け取ったサイズ(オクテット単位)を表す数値で、適用されたコンテンツエンコーディングを削除した後の値です。
- {{domxref("PerformanceResourceTiming.deliveryType")}} {{ReadOnlyInline}}
- : リソースがどのように配信されたかを示します。例えば、キャッシュから配信されたか、ナビゲーションの先読みから配信されたかなどです。
- {{domxref('PerformanceResourceTiming.encodedBodySize')}} {{ReadOnlyInline}}
- : フェッチ(HTTP またはキャッシュ)から受け取ったペイロード本体のサイズ(オクテット単位)を表す数値で、適用されたコンテンツエンコーディングを削除する前のものです。
- {{domxref('PerformanceResourceTiming.initiatorType')}} {{ReadOnlyInline}}
- : 文字列で、パフォーマンス項目を開始したウェブプラットフォーム機能を表します。
- {{domxref('PerformanceResourceTiming.nextHopProtocol')}} {{ReadOnlyInline}}
- : 文字列で、 [ALPN プロトコル ID (RFC7301)](https://datatracker.ietf.org/doc/html/rfc7301) によって識別される、リソースを取得するために使用されたネットワークプロトコルを表します。
- {{domxref('PerformanceResourceTiming.renderBlockingStatus')}} {{ReadOnlyInline}}
- : 文字列で、レンダリングをブロックする状態を表します。`"blocking"` または `"non-blocking"` のどちらかです。
- {{domxref('PerformanceResourceTiming.responseStatus')}} {{experimental_inline}} {{ReadOnlyInline}}
- : リソースのフェッチ時に返される HTTP レスポンスステータスコードを表す数値です。
- {{domxref('PerformanceResourceTiming.transferSize')}} {{ReadOnlyInline}}
- : フェッチされたリソースのサイズ (オクテット単位)を表す数値。このサイズには、レスポンスヘッダーフィールドとレスポンスのペイロード本体が含まれます。
- {{domxref('PerformanceResourceTiming.serverTiming')}} {{ReadOnlyInline}}
- : サーバーのタイミングメトリクスを格納した {{domxref("PerformanceServerTiming")}} 項目の配列です。
## インスタンスメソッド
- {{domxref("PerformanceResourceTiming.toJSON()")}}
- : この `PerformanceResourceTiming` オブジェクトの JSON 表現を返します。
## 例
### リソースのタイミング情報のログ出力
{{domxref("PerformanceObserver")}} を使用した例です。このオブジェクトは、新しい `resource` パフォーマンス項目がブラウザーのパフォーマンスタイムラインに記録されると、それを通知します。オブザーバーが作成される前の項目にアクセスするために `buffered` オプションを使用します。
```js
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ type: "resource", buffered: true });
```
{{domxref("Performance.getEntriesByType()")}} を使用した例です。このメソッドを呼び出した時点でブラウザー上のパフォーマンスタイムラインに存在する `resource` パフォーマンス項目のみを表示します。
```js
const resources = performance.getEntriesByType("resource");
resources.forEach((entry) => {
console.log(entry);
});
```
## 仕様書
{{Specifications}}
## ブラウザーの互換性
{{Compat}}
## 関連情報
- [リソースタイミング(概要)](/ja/docs/Web/API/Performance_API/Resource_timing)