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
実装するユーザーエージェントは
"navigation"を
supportedEntryTypes
(Windowコンテキスト)に含める必要があります。これにより、開発者はNavigation Timingの対応可否を検出できます。
3.2.
PerformanceResourceTimingインターフェースとの関係
PerformanceNavigationTiming
インターフェースは
PerformanceResourceTiming
インターフェースの以下の属性を拡張します:
-
redirectStartゲッター手順は以下を実行します:- thisのリダイレクト数が0なら、0を返します。
- それ以外はthisの
redirectStartを返します。
-
redirectEndゲッター手順は以下を実行します:- thisのリダイレクト数が0なら、0を返します。
- それ以外はthisの
redirectEndを返します。
`redirectStart`と`redirectEnd`は
PerformanceResourceTimingで公開されていますが、 Navigation Timingではクロスオリジンリダイレクトの場合0を返す点が異なります。 -
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
not restored reasons
が関連付けられています。
PerformanceNavigationTiming
には対応する
PerformanceTimingConfidence
confidence value
が関連付けられています。
PerformanceNavigationTiming
には対応する実数
ランダムトリガーレート
があり、実装定義です。
PerformanceNavigationTiming
には対応する
PerformanceTimingConfidenceValue
underlying confidence value
があり、実装定義です。
PerformanceNavigationTiming
には対応するnullまたはサービスワーカータイミング情報
サービスワーカータイミング
が関連付けられています。
unloadEventStart ゲッターは、 thisの 前回のドキュメントアンロードタイミング の unloadイベント開始時刻を返します。
もし前回のドキュメントと現在のドキュメントが同じ オリジンなら、 このタイムスタンプはユーザーエージェントが unload イベントを前回のドキュメントに開始する直前に計測されます。前回のドキュメントが存在しない場合や オリジンが異なる場合、この属性は0を返します。
unloadEventEnd ゲッターは、 thisの 前回のドキュメントアンロードタイミング の unloadイベント終了時刻を返します。
前回のドキュメントと現在のドキュメントが同じ オリジンなら、 このタイムスタンプはユーザーエージェントが unload イベントを前回のドキュメントに処理した直後に計測されます。前回のドキュメントが存在しない場合や オリジンが異なる場合、この属性は0を返します。
domInteractive ゲッターは、 thisの ドキュメントロードタイミング の DOMインタラクティブ時刻を返します。
このタイムスタンプはユーザーエージェントが 現在ドキュメントの準備状態を "interactive"に設定する前に計測されます。
domContentLoadedEventStart ゲッターは thisの ドキュメントロードタイミング の DOMContentLoadedイベント開始時刻を返します。
このタイムスタンプはユーザーエージェントが DOMContentLoaded イベントを発行する前に計測されます。
domContentLoadedEventEnd ゲッターは thisの ドキュメントロードタイミング の DOMContentLoadedイベント終了時刻を返します。
このタイムスタンプはユーザーエージェントが DOMContentLoaded イベントの処理を完了した後に計測されます。
domComplete ゲッターは thisの ドキュメントロードタイミングの DOM完了時刻を返します。
このタイムスタンプはユーザーエージェントが 現在ドキュメントの準備状態を "complete"に設定する前に計測されます。詳細は ドキュメントの準備状態を参照してください。
loadEventStart ゲッターは thisの ドキュメントロードタイミングの loadイベント開始時刻を返します。
このタイムスタンプはユーザーエージェントが ドキュメントのload イベントを発行する前に計測されます。
loadEventEnd ゲッターは thisの ドキュメントロードタイミングの loadイベント終了時刻を返します。
このタイムスタンプはユーザーエージェントが ドキュメントのload イベントの処理を完了した後に計測されます。
type ゲッターはthisの ナビゲーションタイプを実行します。
クライアント側のリダイレクト(Refreshプラグマ指令など)は、 この仕様ではHTTPリダイレクトとみなしません。その場合、 type 属性は適切な値(例:現在ページのリロードなら reload、 新しいURLのナビゲーションなら navigate)を返すべきです。
redirectCount ゲッターは thisの リダイレクト数を返します。
criticalCHRestart ゲッターは thisの `Critical-CH`再起動時刻を返します。
criticalCHRestartが0でない場合、他の全タイムスタンプより先( navigationStart、unloadEventStart、unloadEventEndを除く) になります。これはナビゲーションのリダイレクト部分が再起動された瞬間を示します。
notRestoredReasons ゲッターは thisの not restored reasonsを返します。
confidence ゲッターは次の手順を実行します:
- thisのドキュメントロードタイミング のDOMインタラクティブ時刻が0なら、nullを返す。
- thisのconfidence valueがnullでなければ、 それを返す。
- confidenceを新しい
PerformanceTimingConfidenceオブジェクトにし、 thisの 関連設定オブジェクトの 関連レルムで作成する。 - confidenceの
randomizedTriggerRateを thisのランダムトリガーレートで設定する。 -
confidenceの
valueの値は次のアルゴリズムで決定する:- pをconfidenceの
randomizedTriggerRateとする。 - underlyingを
PerformanceTimingConfidenceValue型のthisの underlying confidence value とする。 - 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
-
この属性は区間[0, 1)の実数を返し、 信頼度
valueを公開する際、ノイズがどの頻度で適用されるかを示します。 - value
-
この属性は
PerformanceTimingConfidenceValueを返します。 - toJSON()
-
このメソッドは、標準toJSON手順をthisに対して実行します。
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 イベントを開始する直前の時刻を返します。前のドキュメントが存在しない場合や、オリジンが異なる場合は0を返します。
- unloadEventEnd
-
前のドキュメントと現在のドキュメントが同一オリジンの場合、この属性は ユーザーエージェントが前のドキュメントの unload イベントを完了した直後の時刻を返します。前のドキュメントが存在しない場合や、オリジンが異なる場合、あるいはアンロードが未完了の場合は0を返します。
ナビゲーション時にHTTPリダイレクトが存在し、全て同じ オリジンとは限らない場合は、
unloadEventStartおよびunloadEventEndの両方が0を返す必要があります。 - redirectStart
-
ナビゲーション時にHTTPリダイレクトが存在し、全てのリダイレクトが同じ オリジンの場合、この属性はリダイレクトを開始するフェッチの
開始時刻を返します。それ以外は0を返します。 - redirectEnd
-
ナビゲーション時にHTTPリダイレクトが存在し、全てが同じ オリジンの場合、この属性は最後のリダイレクトのレスポンスを受信し終えた直後の時刻を返します。それ以外は0を返します。
- fetchStart
-
新しいリソースを 取得する際、 "GET"のリクエストメソッドを使う場合、fetchStartはユーザーエージェントが HTTPキャッシュ [RFC7234] チェックを開始する直前の時刻を返します。それ以外の場合は、ユーザーエージェントがリソースの 取得 を開始した時刻を返します。
- domainLookupStart
-
この属性はユーザーエージェントが現在のドキュメントのドメイン名解決を開始する直前の時刻を返します。 永続的接続 [RFC2616] が使われる場合や、現在のドキュメントが HTTPキャッシュ [RFC7234] やローカルリソースから取得される場合は、
fetchStartと同じ値を返します。 - domainLookupEnd
-
この属性はユーザーエージェントが現在のドキュメントのドメイン名解決を完了した直後の時刻を返します。 永続的接続 [RFC2616] が使われる場合や、現在のドキュメントが HTTPキャッシュ [RFC7234] やローカルリソースから取得される場合は、
fetchStartと同じ値を返します。HTTPキャッシュ [RFC2616] から内容を確認・取得するのは フェッチ処理の一部です。 これは
requestStart、responseStartおよびresponseEndの属性によって管理されます。ユーザーエージェントが既にキャッシュにドメイン情報を保持している場合、domainLookupStartとdomainLookupEndはキャッシュからドメイン情報の取得を開始・完了した時刻となります。
- connectStart
-
この属性はユーザーエージェントがドキュメントを取得するためにサーバーへの接続を開始する直前の時刻を返します。 永続的接続 [RFC2616] が使われる場合や、現在のドキュメントが HTTPキャッシュ [RFC7234] やローカルリソースから取得される場合は、
domainLookupEndの値を返します。 - connectEnd
-
この属性はユーザーエージェントがサーバーへの接続確立を完了した直後の時刻を返します。 永続的接続 [RFC2616] が使われる場合や、現在のドキュメントが HTTPキャッシュ [RFC7234] やローカルリソースから取得される場合は、
domainLookupEndの値を返します。トランスポート接続に失敗しユーザーエージェントが再度接続を確立した場合、
connectStartおよびconnectEndは新たな接続値を返すべきです。connectEndには、トランスポート接続確立時間だけでなく、SSLハンドシェイクやSOCKS認証などの時間も含まれます。 - secureConnectionStart
-
この属性はオプションです。この属性が利用できないユーザーエージェントは値を未定義とします。利用可能で現在ページのスキーム [URL] が "https" の場合、この属性はセキュア接続ハンドシェイク開始直前の時刻を返します。利用可能だがHTTPS未使用なら0を返します。
- requestStart
-
この属性はユーザーエージェントがサーバー、HTTPキャッシュ [RFC7234] またはローカルリソースから現在のドキュメント取得リクエストを開始する直前の時刻を返します。
リクエスト送信後にトランスポート接続に失敗し、ユーザーエージェントが新たな接続を再確立&リクエスト再送した場合、
requestStartは新しいリクエスト値を返すべきです。このインターフェースにはリクエスト送信完了時刻を表す属性(例:requestEnd)はありません。
- ユーザーエージェントでリクエスト送信自体がネットワーク層の完了時刻と一致しないことが多く、このような属性の主なメリットが限定的であるため。
- 一部ユーザーエージェントではHTTP層のカプセル化のため、リクエスト送信完了時刻の特定コストが高い場合があるため。
- responseStart
-
この属性はユーザーエージェントがサーバ、HTTPキャッシュ [RFC7234] またはローカルリソースからレスポンスの最初のバイトを受信した直後の時刻を返します。
- responseEnd
-
この属性はユーザーエージェントが現在のドキュメントの最後のバイトを受信した直後、またはトランスポート接続が切断される直前(どちらか早い時刻)を返します。サーバー、HTTPキャッシュ [RFC7234]、 ローカルリソースが対象です。
- domLoading
-
この属性はユーザーエージェントが現在ドキュメントの準備状態を "loading"に設定する直前の時刻を返します。
既存のユーザーエージェントにおいてDocumentオブジェクト生成タイミングに差異があるため、
domLoadingの値は実装依存です。指標として利用すべきではありません。 - domInteractive
-
この属性はユーザーエージェントが現在ドキュメントの準備状態を "interactive"に設定する直前の時刻を返します。
- domContentLoadedEventStart
-
この属性はユーザーエージェントが DOMContentLoadedイベント を
Documentに発火する直前の時刻を返します。 - domContentLoadedEventEnd
-
この属性はドキュメントの DOMContentLoadedイベント の完了直後の時刻を返します。
- domComplete
-
この属性はユーザーエージェントが現在ドキュメントの準備状態を "complete"に設定する直前の時刻を返します。
準備状態が同じ状態に何度も設定される場合、
domLoading,domInteractive,domContentLoadedEventStart,domContentLoadedEventEndおよびdomCompleteは最初の準備状態遷移時の時刻を返す必要があります。 - loadEventStart
-
この属性は現在のドキュメントのloadイベント発火直前の時刻を返します。loadイベントがまだ発火していない場合は0を返します。
- loadEventEnd
-
この属性は現在のドキュメントのloadイベントが完了した時刻を返します。loadイベントが未発火または未完了の場合は0を返します。
- toJSON()
- 標準のtoJSON手順をthisで実行する。
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
-
この属性は最後の非リダイレクト ナビゲーションのタイプを返します。 以下のいずれかの
navigation typeの値を持つ必要があります。Refresh pragma属性 などクライアント側リダイレクトは、この仕様ではHTTPリダイレクトとはみなしません。 その場合、この
type属性は適切な値(現在ページのリロードではTYPE_RELOAD、新しいURLへのナビゲーションならTYPE_NAVIGATE)を返すべきです。 - redirectCount
-
この属性は最後の非リダイレクトナビゲーションからのリダイレクト回数を返します。リダイレクトが無い場合や、宛先ドキュメントと異なる 同一オリジン ではないリダイレクトが含まれる場合は0を返す必要があります。
- toJSON()
- 標準のtoJSON手順をthisで実行する。
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 に感謝します。