1. はじめに
このセクションは規範的ではありません。
ウェブアプリケーションのパフォーマンス特性を正確に測定することは、 ウェブアプリケーションを高速化する上で重要な側面です。 [JSMEASURE]で説明されているような JavaScriptベースの仕組みは、アプリケーション内でユーザー遅延測定の包括的な計測を提供できますが、 多くの場合、エンドツーエンドの遅延全体や詳細な情報を十分に取得することができません。 例えば、以下のJavaScriptはページの完全なロード時間を測ろうとした単純な試みです:
< html > < head > < script type = "text/javascript" > var start= new Date(). getTime(); function onLoad() { var now= new Date(). getTime(); var latency= now- start; alert( "page loading time: " + latency); } </ script > </ head > < body onload = "onLoad()" > <!- Main page body goes from here. --> </ body > </ html >
上記スクリプトは、head内の最初のJavaScriptが実行された後からページロード時間を計算しますが、 ページがサーバーから取得されるまでの時間や、ページの初期化ライフサイクルについては情報を提供しません。
この仕様は、PerformanceNavigationTiming
インターフェースを定義し、
[PERFORMANCE-TIMELINE-2]の一部として
ドキュメントのナビゲーションに関する高解像度なパフォーマンス指標データの保存・取得を行います。
PerformanceNavigationTimingインターフェースが
[HR-TIME]を利用するため、
全ての時間値はエントリーのタイムオリジン
と関連設定オブジェクトに対して測定されます。
例えば、レスポンス終了がナビゲーション開始から100ms後に発生した場合、PerformanceNavigationTiming
データは次のようになります:
startTime: 0.000 // ナビゲーションリクエスト開始時刻 responseEnd: 100.000 // 最後に受信したバイトの高解像度時刻
下記スクリプトは、
PerformanceNavigationTiming
インターフェースを使って、
ドキュメントのナビゲーションに関する正確なタイミングデータを取得する方法です:
< script > function showNavigationDetails() { // 最初のエントリーを取得 const [ entry] = performance. getEntriesByType( "navigation" ); // 開発者コンソールでテーブル表示 console. table( entry. toJSON()); } </ script > < body onload = "showNavigationDetails()" >
2. 用語集
構文「Fooオブジェクト」(Fooが実際にはインターフェースの場合)は、
より正確な「インターフェースFooを実装したオブジェクト」の代わりとして使われることがあります。
現在のドキュメントとは、 Windowオブジェクトの最新のDocumentオブジェクトに関連付けられているドキュメントを指します。
本仕様全体で、すべての時刻値はドキュメントのナビゲーション開始からミリ秒単位で測定されます。 例えば、ドキュメントのナビゲーション開始は時刻0で発生します。 「現在時刻」は、ドキュメントのナビゲーション開始から現時点までのミリ秒数を指します。 この時刻の定義は[HR-TIME]仕様に基づきます。
3. ナビゲーションタイミング
3.1. PerformanceEntryインターフェースとの関係
PerformanceNavigationTiming
インターフェイスは、PerformanceEntry
インターフェイスの次の属性を拡張する:
entryTypeゲッターの手順は、DOMString"navigation" を返すことである。startTimeゲッターの手順は、時間値が 0 のDOMHighResTimeStampを返すことである。durationゲッターの手順は、DOMHighResTimeStampを返すことであり、その値は、loadEventEndと this のstartTimeの差に等しい。
PerformanceNavigationTiming
を実装するユーザーエージェントは、
Window
コンテキストの supportedEntryTypes
に "navigation" を含める必要がある。
これにより、開発者は Navigation
Timing のサポートを検出できる。
3.2.
PerformanceResourceTimingインターフェースとの関係
PerformanceNavigationTiming
インターフェイスは、PerformanceResourceTiming
インターフェイスの次の属性を拡張する:
-
redirectStartゲッターの手順は、次の手順を実行する:- this の リダイレクト回数が 0 の場合、0 を返す。
- それ以外の場合、this の
redirectStartを返す。
-
redirectEndゲッターの手順は、次の手順を実行する:- this の リダイレクト回数が 0 の場合、0 を返す。
- それ以外の場合、this の
redirectEndを返す。
`redirectStart` と `redirectEnd` は
PerformanceResourceTimingで公開されているが、 Navigation Timing では 異なる意味を持ち、クロスオリジンのリダイレクトを伴うナビゲーションではゼロを返す。 -
workerStartゲッターの手順は、次の手順を実行する:- workerTiming を this の サービスワーカータイミングとする。
- workerTiming が null の場合、this のプロトタイプの `workerStart` を返す。
- workerTiming の 開始時刻を返す。
`workerStart` は
PerformanceResourceTimingで公開されているが、 Navigation Timing では 異なる意味を持つ。サブリソースとは異なり、ナビゲーションはサービスワーカーの有効化または実行を行う場合があるためである。 Navigation Timing のコンテキストでは、`workerStart` はワーカーが有効化または開始される 直前に測定されたタイムスタンプを返す。正確な定義については [service-workers] を 参照。 -
fetchStartゲッターの手順は、次の手順を実行する:- workerTiming を this の サービスワーカータイミングとする。
- workerTiming が null の場合、this のプロトタイプの `fetchStart` を返す。
- workerTiming の fetch イベントのディスパッチ 時刻を返す。
サービスワーカーがナビゲーションの一部として使用される場合、 `fetchStart` のオーバーロードは
PerformanceResourceTimingにおける意味とは異なる意味を持つ。 これは、サービスワーカーに対してFetchEventがディスパッチされる 直前に測定されたタイムスタンプを返す。文書のナビゲーションタイミングエントリにおける `workerStart` と `fetchStart` の時間差を使用して、 ワーカーの初期化または有効化におおよそどの程度の時間が かかったかを判断できる。正確な定義については [service-workers] を 参照。
パフォーマンスタイムラインに含まれるのは 現在の文書
リソースのみであり、パフォーマンスタイムラインには
PerformanceNavigationTiming
オブジェクトが 1 つだけ存在する。
3.3. PerformanceNavigationTiming インターフェース
requestStart、
responseStart
および
responseEnd
属性によって扱われる。
[Exposed =Window ]interface :PerformanceNavigationTiming PerformanceResourceTiming {readonly attribute DOMHighResTimeStamp unloadEventStart ;readonly attribute DOMHighResTimeStamp unloadEventEnd ;readonly attribute DOMHighResTimeStamp domInteractive ;readonly attribute DOMHighResTimeStamp domContentLoadedEventStart ;readonly attribute DOMHighResTimeStamp domContentLoadedEventEnd ;readonly attribute DOMHighResTimeStamp domComplete ;readonly attribute DOMHighResTimeStamp loadEventStart ;readonly attribute DOMHighResTimeStamp loadEventEnd ;readonly attribute NavigationTimingType type ;readonly attribute unsigned short redirectCount ;readonly attribute DOMHighResTimeStamp criticalCHRestart ;readonly attribute NotRestoredReasons ?notRestoredReasons ;readonly attribute PerformanceTimingConfidence confidence ; [Default ]object (); };toJSON
PerformanceNavigationTiming
には、関連付けられた
文書読み込みタイミング情報 文書読み込みタイミングがある。
PerformanceNavigationTiming
には、関連付けられた
文書アンロードタイミング情報 前の文書のアンロードタイミングがある。
PerformanceNavigationTiming
には、関連付けられた
数値 リダイレクト回数がある。
PerformanceNavigationTiming
には、関連付けられた
NavigationTimingType
ナビゲーション種別がある。
PerformanceNavigationTiming
には、関連付けられた
DOMHighResTimeStamp
`Critical-CH` 再開時刻がある。
PerformanceNavigationTiming
には、関連付けられた
NotRestoredReasons
復元されなかった理由がある。
PerformanceNavigationTiming
には、関連付けられた
PerformanceTimingConfidence
信頼度値がある。
PerformanceNavigationTiming
には、関連付けられた実数
ランダム化トリガー率
があり、これは実装定義である。
PerformanceNavigationTiming
には、関連付けられた PerformanceTimingConfidenceValue
基礎となる信頼度値
があり、これは実装定義である。
PerformanceNavigationTiming
には、関連付けられた null または サービスワーカータイミング情報
サービスワーカータイミングがある。
unloadEventStart
ゲッターの手順は、this の
前の文書のアンロード
タイミングの unload イベント開始時刻を返すことである。
前の文書と現在の文書が同じ オリジンを持つ場合、このタイムスタンプは ユーザーエージェントが前の文書の unload イベントの処理を開始する 直前に測定される。前の文書が存在しない場合、または 前の文書が現在の文書とは異なる オリジンを持つ場合、この属性は ゼロを返す。
unloadEventEnd ゲッターの
手順は、this の
前の文書のアンロード
タイミングの
unload イベント終了時刻を返すことである。
前の文書と現在の文書が同じ オリジンを持つ場合、このタイムスタンプは ユーザーエージェントが前の文書の unload イベントの処理を完了した 直後に測定される。前の文書が存在しない場合、または 前の文書が現在の文書とは異なる オリジンを持つ場合、この属性は ゼロを返す。
domInteractive ゲッターの
手順は、
this の 文書読み込みタイミングの DOM interactive 時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが 現在の文書の準備状態を "interactive" に設定する前に測定される。
domContentLoadedEventStart
ゲッターの手順は、this の
文書読み込みタイミングの
DOM content loaded イベント開始時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが DOMContentLoaded イベントをディスパッチする前に測定される。
domContentLoadedEventEnd
ゲッターの手順は、
this の 文書読み込みタイミングの
DOM content loaded イベント終了時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが DOMContentLoaded イベントの処理を完了した後に測定される。
domComplete ゲッターの手順は、
this の 文書読み込みタイミングの DOM complete 時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが 現在の文書の準備状態を "complete" に設定する前に測定される。正確な 定義については、文書の準備状態を参照。
loadEventStart ゲッターの
手順は、
this の 文書読み込みタイミングの load イベント開始時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが文書の load イベントをディスパッチする前に測定される。
loadEventEnd ゲッターの
手順は、
this の 文書読み込みタイミングの load イベント終了時刻を返すことである。
このタイムスタンプは、ユーザーエージェントが文書の load イベントの処理を完了した後に測定される。
type ゲッターの手順は、
this の ナビゲーション種別を実行することである。
Refresh pragma
ディレクティブを使用するものなどのクライアント側リダイレクトは、この仕様では HTTP
リダイレクトとは見なされない。そのような
場合、type
属性は、現在のページを再読み込みする場合は
reload、
新しい URL にナビゲートする場合は navigate などの
適切な値を返すべきである。
redirectCount ゲッターの
手順は、this の
リダイレクト回数を返すことである。
criticalCHRestart
ゲッターの手順は、this の
`Critical-CH` 再開時刻を返すことである。
criticalCHRestart が 0 でない場合、navigationStart、 unloadEventStart、unloadEventEnd を除く他のすべてのタイムスタンプより前になる。これは、 ナビゲーションのリダイレクト部分が再開された 時点を示すためである。
notRestoredReasons ゲッターの
手順は、this の
復元されなかった理由を返すことである。
confidence ゲッターの手順
は、次の手順を実行する:
- this の 文書読み込みタイミングの DOM interactive 時刻が 0 の場合、null を返す。
- this の 信頼度値が null でない場合、 それを返す。
- confidence を、
this の 関連する設定オブジェクトの 関連するレルムで作成された新しい
PerformanceTimingConfidenceオブジェクトとする。 - confidence の
randomizedTriggerRateを this の ランダム化トリガー率に設定する。 -
confidence の
valueを、次のアルゴリズムで決定される値に設定する:- p を confidence の
randomizedTriggerRateとする。 - underlying を this の 基礎となる信頼度
値、すなわち
PerformanceTimingConfidenceValueとする。 - r を区間 [0, 1) から一様ランダムに選ばれた実数とする。
- r が p 以上の場合、underlying を返す。
- それ以外の場合:
- p を confidence の
- confidence を返す。
これらの値は一度だけ設定し、 this の存続期間中は変更されるべきではありません。
このセクションは、RUMプロバイダーや開発者が
confidenceを解釈する際の参考用です。
ランダムトリガーレート
はレコードごとに異なる場合があるため、記録ごとに重み付けすることで偏りのない集計値が得られます。
以下の手順は、valueに基づく重み付け方法を示します。
-
各レコードについて:
- pをレコードの
randomizedTriggerRateとする。 - cをレコードの
valueとする。 - Rはcが
highの場合1、そうでなければ0とする。 -
wをcに基づいて算出:
- high平均の推定: w
= (R - (p / 2)) / (1 - p) - low平均の推定: w
= ((1 - R) - (p / 2)) / (1 - p)
- high平均の推定: w
- weighted_durationを
duration* wで算出。
- pをレコードの
- total_weighted_durationを全レコードのweighted_duration合計とする。
- sum_weightsを全レコードのw合計とする。
- debiased_mean = total_weighted_duration / sum_weights(sum_weightsが極端にゼロでなければ)。
high
や
low
の偏り補正パーセンタイルを算出するには:
- 偏り補正平均と同じ手順で各レコードの重みwを算出。
- sum_weightsを全レコードのw合計とする。
- sorted_recordsを
duration順(昇順)でソート。 - 目的のpercentile(0-100)で
q
= percentile / 100.0 -
sorted_recordsを各レコードについて:
- 各レコードで累積重みcwを算出:
cw
= sum_{i: duration_i <= duration_j} w_i - 累積分布関数cdfを
cdf
= cw / sum_weightsで算出
- 各レコードで累積重みcwを算出:
cw
- cdf >= qとなる最初のidxを探す。
-
補間割合を算出:
- lower_cdf = sorted_records[idx-1]のcdf
- upper_cdf = sorted_records[idx]のcdf
- lower_cdf = upper_cdfなら
durationfor sorted_records[idx]を返す。 - それ以外の場合:
toJSON()メソッドは、 標準のtoJSON手順 をthisに対して実行します。
3.3.1.
NavigationTimingType
列挙型
enum {NavigationTimingType ,"navigate" ,"reload" };"back_forward"
値の定義は次の通りです:
- navigate
- 履歴操作動作 が "default" または "replace" の場合のナビゲーションを表します。
- reload
- navigableが再読み込みされた場合のナビゲーションです。
- back_forward
- 履歴から適用されるナビゲーションです。
上記列挙値の書式は WebIDLにおける列挙値の書式推奨と一致しません。これは既存実装との後方互換性のため変更できません。[WebIDL]
3.3.2.
PerformanceTimingConfidence
インターフェース
[Exposed =Window ]interface {PerformanceTimingConfidence readonly attribute double randomizedTriggerRate ;readonly attribute PerformanceTimingConfidenceValue value ;object (); };toJSON
-
randomizedTriggerRate, 型は double、読み取り専用 -
この属性は区間 [0, 1) の実数を返さなければならず、 confidence
valueを公開する際にノイズが適用される頻度を示す。 -
value, 型は PerformanceTimingConfidenceValue、 読み取り専用 -
この属性は
PerformanceTimingConfidenceValueを返さなければならない。 - toJSON()
-
このメソッドは this に対して デフォルトの toJSON 手順を実行する。
3.3.3. PerformanceTimingConfidenceValue
列挙型
enum {PerformanceTimingConfidenceValue ,"high" };"low"
値の定義は次の通りです:
- high
- ユーザーエージェントが、ナビゲーション指標値が現在のユーザーデバイスを代表していると判断した場合です。
- low
- ナビゲーション指標値が現在のユーザーデバイスを代表しない可能性がある場合です。ユーザーエージェントはマシンの状態やユーザーの設定等を考慮して判断する場合があります。
underlying confidence valueを決定する際、ユーザーエージェントは 一時的なランタイム状態(例:ユーザーエージェントの起動処理、一時的なCPU使用率や 一時的なメモリ圧迫等の短期的な状況)だけを根拠にしなければなりません。
ユーザーエージェントはunderlying confidence valueの判定根拠として、 永続的な端末やプロファイル特性を使ってはいけません。例:物理RAM容量、CPUコア数、インストール済み拡張数、静的な環境設定等は不可とします。
confidence値はシステム能力ではなく、ランタイムの変動のみを反映することを意図しています。
4. プロセス
4.1. 処理モデル
PerformanceNavigationTiming
インターフェースで定義されているタイミング属性を示します。丸括弧付きの属性は、異なるオリジンのドキュメントを含むナビゲーションでは利用できない場合があります。
5. ナビゲーションタイミングエントリの作成
各ドキュメントは関連付けられたナビゲーションタイミングエントリを持ち、初期状態は未設定です。
Document
document のナビゲーションタイミングエントリを作成するには、
フェッチタイミング情報 fetchTiming、数値
redirectCount、
NavigationTimingType
navigationType、null またはサービスワーカータイミング情報 serviceWorkerTiming、
DOMString cacheMode、DOMHighResTimeStamp
criticalCHRestart、およびレスポンスボディ
情報 bodyInfo が与えられたとき、次を行う:
- globalをdocumentの関連グローバルオブジェクトとする。
- navigationTimingEntryを新しい
PerformanceNavigationTimingオブジェクトとして globalのレルムで作成する。 - リソースタイミングエントリのセットアップを
navigationTimingEntryに対して "
navigation"、 documentのURL、 fetchTiming、cacheMode、bodyInfoを指定して実行する。 - navigationTimingEntryのドキュメントロードタイミングに documentのロードタイミング情報を設定する。
- navigationTimingEntryの前回のドキュメントアンロードタイミングに documentの前回ドキュメントアンロードタイミングを設定する。
- navigationTimingEntryのリダイレクト数に redirectCountを設定する。
- navigationTimingEntryのナビゲーションタイプに navigationTypeを設定する。
- navigationTimingEntryのサービスワーカータイミングに serviceWorkerTimingを設定する。
- documentのナビゲーションタイミングエントリを navigationTimingEntryに設定する。
- navigationTimingEntryの`Critical-CH`再起動時刻 にcriticalCHRestartを設定する。
- navigationTimingEntryのnot restored reasons に、 NotRestoredReasonsオブジェクト生成の documentのnot restored reasons を渡した結果を設定する。
- navigationTimingEntryをglobalの パフォーマンスエントリバッファに追加する。
ナビゲーションタイミングエントリをキューする
には、Document
documentについて
ナビゲーションPerformanceEntryをキューする処理で
documentの
ナビゲーションタイミングエントリをキューしてください。
6. プライバシーに関する考慮事項
このセクションは規範的ではありません。
6.1. 情報開示
細工されたタイミング攻撃によって、エンドユーザーの閲覧履歴や活動履歴が漏洩する可能性があります。たとえば、アンロード時間で前ページのアンロードハンドラの実行時間を知ることで、ユーザーのログイン状態を推測できる場合があります。こうした攻撃は、ドキュメントのアンロード時に同一オリジンチェックアルゴリズムを強制することで、 HTML仕様 で対策しています。
同一オリジン制約の緩和では、 ドキュメント間の不正な訪問を十分には防げません。共有ホスティングでは、信頼できない第三者が同じIPアドレス・異なるポートでHTTPサーバーをホストすることが可能です。
6.2. クロスディレクトリアクセス
同じホスト名を共有する異なるページ、例えばユーザー生成コンテンツを持つサイトの異なる著者のコンテンツなどは、 パス名でアクセス制限を行う仕組みが無いため同一オリジンと見なされます。 これらのページ間でナビゲーションすると、遷移先ページが前ページ(リダイレクトやunloadイベントなど)のタイミング情報にアクセスできてしまいます。
7. セキュリティに関する考慮事項
このセクションは規範的ではありません。
PerformanceNavigationTiming
インターフェースは
現在のドキュメント
へ前のドキュメントに関するタイミング情報を公開します。
前のドキュメントの情報を含むPerformanceNavigationTiming
属性へのアクセスを制限するため、
前ドキュメントアンロードアルゴリズムでは
同一オリジンポリシー
を強制し、前のドキュメント由来属性は0に設定されます。
7.1. プロキシサーバーの検出
ユーザーエージェントとWebサーバーの間にプロキシが存在する場合、
connectStart
と
connectEnd
属性の間隔はWebサーバーまでではなくプロキシまでの遅延となります。
この情報でWebサーバーはプロキシの存在を推定できる場合があります。
SOCKSプロキシではこの区間にプロキシ認証時間やサーバーへの接続遅延も含まれるため、プロキシ検出が難しくなります。
HTTPプロキシの場合、ユーザーエージェントはプロキシサーバーを一切認識しない場合もあるので、この攻撃の防止策は常に可能とは限りません。
8. 廃止
このセクションでは、[NAVIGATION-TIMING] Level 1 で導入され、後方互換性のために残された属性やインターフェースについて定義します。
著者は下記インターフェースの使用を避け、
必ず
新しいPerformanceNavigationTiming
インターフェースを利用してください——変更と改善の一覧を参照。
8.1. PerformanceTiming インターフェース
[Exposed =Window ]interface {PerformanceTiming readonly attribute unsigned long long ;navigationStart readonly attribute unsigned long long ;unloadEventStart readonly attribute unsigned long long ;unloadEventEnd readonly attribute unsigned long long ;redirectStart readonly attribute unsigned long long ;redirectEnd readonly attribute unsigned long long ;fetchStart readonly attribute unsigned long long ;domainLookupStart readonly attribute unsigned long long ;domainLookupEnd readonly attribute unsigned long long ;connectStart readonly attribute unsigned long long ;connectEnd readonly attribute unsigned long long ;secureConnectionStart readonly attribute unsigned long long ;requestStart readonly attribute unsigned long long ;responseStart readonly attribute unsigned long long ;responseEnd readonly attribute unsigned long long ;domLoading readonly attribute unsigned long long ;domInteractive readonly attribute unsigned long long ;domContentLoadedEventStart readonly attribute unsigned long long ;domContentLoadedEventEnd readonly attribute unsigned long long ;domComplete readonly attribute unsigned long long ;loadEventStart readonly attribute unsigned long long ; [loadEventEnd Default ]object (); };toJSON
このセクションで定義されるすべての時刻値は、の午前0時からのミリ秒数で測定されます。
- navigationStart
-
この属性は、ユーザーエージェントが前の文書を アンロードするよう求める処理を 完了した直後の時刻を返さなければならない。前の 文書がない場合、この属性は現在の 文書が作成された時刻を返さなければならない。
この属性は
PerformanceNavigationTimingには定義されていない。代わりに、作者はtimeOriginを使用して同等のタイムスタンプを取得できる。 - unloadEventStart
-
前の文書と現在の文書が同じ オリジンを持つ場合、この 属性は ユーザーエージェントが前の文書の unload イベントを 開始する直前の時刻を返さなければならない。前の文書がない場合、または 前の文書が現在の文書とは異なるオリジンを 持つ場合、この 属性はゼロを返さなければならない。
- unloadEventEnd
-
前の文書と現在の文書が同じ 同一オリジンである場合、この 属性は ユーザーエージェントが前の文書の unload イベントを 完了した直後の時刻を返さなければならない。前の文書がない場合、または 前の文書が現在の文書とは異なるオリジンを 持つ場合、あるいは unload がまだ完了していない場合、この属性はゼロを返さなければならない。
ナビゲーション時にHTTP リダイレクトがあり、すべてのリダイレクトが 同じオリジンからのものでない場合、
unloadEventStartとunloadEventEndはどちらもゼロを返さなければならない。 - redirectStart
-
ナビゲーション時にHTTP リダイレクトがあり、かつすべてのリダイレクトが 同じオリジンからのものである場合、この 属性はリダイレクトを開始する
フェッチの開始時刻を 返さなければならない。それ以外の場合、この属性は ゼロを返さなければならない。 - redirectEnd
-
ナビゲーション時にHTTP リダイレクトがあり、すべてのリダイレクトが同じ オリジンからのものである場合、この 属性は 最後のリダイレクトのレスポンスの最後のバイトを受信した 直後の時刻を返さなければならない。それ以外の場合、この属性は ゼロを返さなければならない。
- fetchStart
-
新しいリソースが "GET" でフェッチされる リクエスト メソッドを使用する場合、fetchStart は ユーザーエージェントが HTTP キャッシュ [RFC9111]の確認を開始する直前の時刻を 返さなければならない。それ以外の場合、これは ユーザーエージェントがリソースのフェッチを 開始する時刻を返さなければならない。
- domainLookupStart
-
この属性は ユーザーエージェントが現在の文書のドメイン名検索を開始する直前の時刻を 返さなければならない。 持続的 接続 [RFC9112]が使用される場合、または 現在の文書が HTTP キャッシュ [RFC9111]もしくはローカルリソースから取得される場合、 この属性は
fetchStartと同じ値を返さなければならない。 - domainLookupEnd
-
この属性は、 ユーザーエージェントが現在の文書のドメイン名検索を完了した直後の時刻を返さなければならない。 持続的 接続 [RFC9112]が使用される場合、または 現在の文書が HTTP キャッシュ [RFC9111]もしくはローカルリソースから取得される場合、 この属性は
fetchStartと同じ値を返さなければならない。HTTP キャッシュ [RFC9111]からの 内容の確認および取得は フェッチ処理の一部である。これは
requestStart、responseStartおよびresponseEnd属性によって扱われる。ユーザーエージェントがすでにドメイン情報を キャッシュ内に持っている場合、domainLookupStart と domainLookupEnd は、 ユーザーエージェントがキャッシュからのドメインデータの 取得を開始および終了する時刻を表す。
- connectStart
-
この属性は、 ユーザーエージェントが文書を取得するためにサーバーへの接続の確立を 開始する直前の時刻を返さなければならない。持続的 接続 [RFC9112]が使用される場合、または現在の文書が HTTP キャッシュ [RFC9111]もしくは ローカルリソースから取得される場合、この属性は
domainLookupEndの値を返さなければならない。 - connectEnd
-
この属性は、 ユーザーエージェントが現在の文書を取得するためのサーバーへの接続の 確立を完了した直後の時刻を返さなければならない。 持続的接続 [RFC9112]が使用される場合、または 現在の文書が HTTP キャッシュ [RFC9111]もしくはローカルリソースから取得される場合、 この属性は
domainLookupEndの値を返さなければならない。トランスポート接続が失敗し、ユーザーエージェントが 接続を再度開いた場合、
connectStartとconnectEndは新しい接続の対応する 値を返すべきである。connectEndはトランスポート接続を確立するための時間間隔に加えて、 SSL ハンドシェイクや SOCKS 認証などのその他の時間 間隔も含まなければならない。 - secureConnectionStart
-
この属性は任意である。この 属性を利用できないユーザーエージェントは、これを undefined に設定しなければならない。この属性が 利用可能な場合、現在のページのスキーム [URL]が "https" であれば、この属性は ユーザーエージェントが現在の接続をセキュアにするためのハンドシェイク処理を 開始する直前の時刻を返さなければならない。この属性が利用可能であっても HTTPS が 使用されていない場合、この属性はゼロを返さなければならない。
- requestStart
-
この属性は、 ユーザーエージェントがサーバー、または HTTP キャッシュ [RFC9111]もしくはローカル リソースから現在の文書を要求し始める直前の時刻を返さなければならない。
リクエストが送信された後にトランスポート接続が失敗し、 ユーザーエージェントが接続を再度開いてリクエストを再送信する場合、
requestStartは新しいリクエストの 対応する値を返すべきである。このインターフェイスには、 リクエスト送信の完了を表す属性、たとえば requestEnd は含まれていない。
- ユーザーエージェントからのリクエスト送信の完了は、 ネットワークトランスポートにおける対応する完了時刻を必ずしも示すとは 限らず、そのため、そのような属性を持つことによる利点の 大部分が失われる。
- 一部のユーザーエージェントでは、HTTP レイヤーの カプセル化により、リクエスト送信の実際の 完了時刻を判断するコストが高い。
- responseStart
-
この属性は、 ユーザーエージェントがサーバー、または HTTP キャッシュ [RFC9111]もしくはローカル リソースからレスポンスの最初のバイトを受信した直後の時刻を返さなければならない。
- responseEnd
-
この属性は、 ユーザーエージェントが現在の文書の最後のバイトを受信した直後、または トランスポート接続が閉じられる直前のいずれか 早い方の時刻を返さなければならない。ここでの文書は、 サーバー、HTTP キャッシュ [RFC9111]、または ローカルリソースのいずれから受信されてもよい。
- domLoading
-
この属性は、 ユーザーエージェントが現在の文書の 準備状態を"loading"に設定する直前の時刻を返さなければならない。
既存のユーザーエージェント間で Document オブジェクトが作成される タイミングが異なるため、
domLoadingが返す値は実装固有であり、 意味のある指標には使用すべきではない。 - domInteractive
-
この属性は、 ユーザーエージェントが現在の文書の 準備状態を"interactive"に設定する直前の時刻を返さなければならない。
- domContentLoadedEventStart
-
この属性は、 ユーザーエージェントが
Documentで DOMContentLoaded イベントを発火する直前の時刻を返さなければならない。 - domContentLoadedEventEnd
-
この属性は、 文書のDOMContentLoaded イベントが完了した直後の時刻を返さなければならない。
- domComplete
-
この属性は、 ユーザーエージェントが現在の文書の 準備状態を"complete"に設定する直前の時刻を返さなければならない。
現在の文書の 準備状態が同じ状態に複数回変化する場合、
domLoading、domInteractive、domContentLoadedEventStart、domContentLoadedEventEndおよびdomCompleteは、対応する文書の準備状態の 変更が最初に発生した時刻を返さなければならない。 - loadEventStart
-
この属性は、現在の文書の load イベントが発火する直前の時刻を返さなければならない。 load イベントがまだ発火していない場合はゼロを返さなければならない。
- loadEventEnd
-
この属性は、現在の文書の load イベントが 完了した時刻を返さなければならない。load イベントが発火していないか、完了していない場合はゼロを返さなければならない。
- toJSON()
- this に対してデフォルトの toJSON 手順を実行する。
8.2. PerformanceNavigation インターフェース
[Exposed =Window ]interface {PerformanceNavigation const unsigned short = 0;TYPE_NAVIGATE const unsigned short = 1;TYPE_RELOAD const unsigned short = 2;TYPE_BACK_FORWARD const unsigned short = 255;TYPE_RESERVED readonly attribute unsigned short ;type readonly attribute unsigned short ; [redirectCount Default ]object (); };toJSON
- TYPE_NAVIGATE
- TYPE_RELOAD
- TYPE_BACK_FORWARD
-
履歴処理動作が "entry update" に 設定されているナビゲーション。
- TYPE_RESERVED
-
上記の値で定義されていないすべてのナビゲーション種別。
- type
-
この属性は、最後の非リダイレクト ナビゲーションの種別を返さなければならない。 これは、次の
ナビゲーション種別値のいずれかでなければならない。Refresh pragma ディレクティブを使用するものなどのクライアント側リダイレクトは、この仕様ではHTTP リダイレクトとは見なされない。そのような 場合、
type属性は、現在のページを再読み込みする場合はTYPE_RELOAD、新しい URL にナビゲートする場合はTYPE_NAVIGATEなど、適切な値を返すべきである。 - redirectCount
-
この属性は、最後の 非リダイレクトナビゲーション以降のリダイレクト数を返さなければならない。リダイレクトがない場合、または 宛先文書と 同一オリジンではない リダイレクトが 1 つでもある場合、この属性はゼロを返さなければならない。
- toJSON()
- this に対してデフォルトの toJSON 手順を実行する。
8.3.
Performance インターフェースへの拡張
[Exposed =Window ]partial interface Performance { [SameObject ]readonly attribute PerformanceTiming ; [timing SameObject ]readonly attribute PerformanceNavigation ; };navigation
Performance インターフェースは [PERFORMANCE-TIMELINE-2] で定義されています。
- timing
-
timing属性は、最後の非リダイレクトナビゲーションからのタイミング情報を表します。 この属性はPerformanceTimingインターフェースで定義されています。 - navigation
-
navigation属性はPerformanceNavigationインターフェースで定義されています。
9. 謝辞
Anne Van Kesteren, Arvind Jain, Boris Zbarsky, Jason Weber, Jonas Sicking, James Simonsen, Karen Anderson, Nic Jansma, Philippe Le Hegaret, Steve Souders, Todd Reifsteck, Tony Gentilcore, William Chan, Zhiheng Wang に感謝します。