ナビゲーションタイミング レベル2

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-navigation-timing-2-20260225/
最新版公開バージョン:
https://www.w3.org/TR/navigation-timing-2/
編集者ドラフト:
https://w3c.github.io/navigation-timing/
過去のバージョン:
履歴:
https://www.w3.org/standards/history/navigation-timing-2/
フィードバック:
public-web-perf@w3.org 件名 “[navigation-timing-2] … メッセージの件名 …” (アーカイブ)
GitHub
テストスイート:
https://wpt.fyi/navigation-timing/
編集者:
Yoav Weiss (Shopify)
(Google)
以前の編集者:
Ilya Grigorik (Google)
(Microsoft Corp.)
(Microsoft Corp.)
(Google Inc.)

概要

この仕様は、ウェブアプリケーションがドキュメントのナビゲーションの完全なタイミング情報へアクセスするためのインターフェースを定義します。

この文書のステータス

このセクションは、本報告が公開された時点での文書のステータスを説明します。 現在のW3C出版物の一覧と この技術報告書の最新版は W3C標準および草案一覧でご覧いただけます。

この文書はWeb Performance Working Groupによって 作業草案として、 勧告トラック を用いて公開されました。 作業草案として公開されても、 W3Cやそのメンバーの支持を 示すものではありません。

この文書は草案です。 今後更新・置換・廃止される可能性があります。 進行中の作業以外の目的で本報告を引用することは適切ではありません。

GitHub Issuesで仕様の議論を行うことを推奨します。

この文書は 2025年8月18日 W3Cプロセス文書 に基づいて管理されています。

この文書は、 W3C特許ポリシーの下で活動するグループによって作成されました。 W3Cは関連成果物との関係で提出された 特許公開リスト を公開しています。 このページには特許の公開方法も記載されています。 特許の対象となると考えられる知識を持つ個人は、 W3C特許ポリシーの6節 に従って情報を公開しなければなりません。

Navigation Timing 2は、[NAVIGATION-TIMING]の初版を置き換え、 以下の変更を含みます:

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 インターフェースの以下の属性を拡張します:

PerformanceNavigationTiming 実装するユーザーエージェントは "navigation"supportedEntryTypesWindowコンテキスト)に含める必要があります。これにより、開発者はNavigation Timingの対応可否を検出できます。

3.2. PerformanceResourceTimingインターフェースとの関係

PerformanceNavigationTiming インターフェースは PerformanceResourceTiming インターフェースの以下の属性を拡張します:

パフォーマンスタイムラインには現在のドキュメントリソースのみが含まれます。 パフォーマンスタイムライン上に存在するPerformanceNavigationTimingオブジェクトは1つだけです。

3.3. PerformanceNavigationTiming インターフェース

HTTPキャッシュ [RFC7234] の内容を確認および取得することは フェッチ処理の一部です。 これは 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でない場合、他の全タイムスタンプより先( navigationStartunloadEventStartunloadEventEndを除く) になります。これはナビゲーションのリダイレクト部分が再起動された瞬間を示します。

notRestoredReasons ゲッターは thisnot restored reasonsを返します。

confidence ゲッターは次の手順を実行します:

  1. thisドキュメントロードタイミングDOMインタラクティブ時刻が0なら、nullを返す。
  2. thisconfidence valueがnullでなければ、 それを返す。
  3. confidenceを新しい PerformanceTimingConfidence オブジェクトにし、 this関連設定オブジェクト関連レルムで作成する。
  4. confidencerandomizedTriggerRatethisランダムトリガーレートで設定する。
  5. confidencevalue の値は次のアルゴリズムで決定する:
    1. pconfidencerandomizedTriggerRate とする。
    2. underlyingPerformanceTimingConfidenceValue 型のthisunderlying confidence value とする。
    3. rを区間[0, 1)の一様ランダム実数とする。
    4. もしr >= pならunderlyingを返す。
    5. それ以外の場合:
      1. sを集合{0, 1}から一様ランダムで選んだ整数とする。
      2. sが0なら high を返す。
      3. それ以外なら low を返す。
  6. confidenceを返す。

これらの値は一度だけ設定し、 this の存続期間中は変更されるべきではありません。

このセクションは、RUMプロバイダーや開発者が confidenceを解釈する際の参考用です。 ランダムトリガーレート はレコードごとに異なる場合があるため、記録ごとに重み付けすることで偏りのない集計値が得られます。 以下の手順は、valueに基づく重み付け方法を示します。

highlow双方の偏り補正平均を算出するには:

  1. 各レコードについて:
    • pをレコードの randomizedTriggerRateとする。
    • cをレコードの valueとする。
    • Rchighの場合1、そうでなければ0とする。
    • wcに基づいて算出:
      • high平均の推定: w = (R - (p / 2)) / (1 - p)
      • low平均の推定: w = ((1 - R) - (p / 2)) / (1 - p)
      w一部レコードで負の値になることがありますが、全てのレコードを保持してください。
    • weighted_durationduration * wで算出。
  2. total_weighted_durationを全レコードのweighted_duration合計とする。
  3. sum_weightsを全レコードのw合計とする。
  4. debiased_mean = total_weighted_duration / sum_weightssum_weightsが極端にゼロでなければ)。

highlow の偏り補正パーセンタイルを算出するには:

  1. 偏り補正平均と同じ手順で各レコードの重みwを算出。
  2. sum_weightsを全レコードのw合計とする。
  3. sorted_recordsduration順(昇順)でソート。
  4. 目的のpercentile(0-100)で q = percentile / 100.0
  5. sorted_recordsを各レコードについて:
    • 各レコードで累積重みcwを算出: cw = sum_{i: duration_i <= duration_j} w_i
    • 累積分布関数cdfcdf = cw / sum_weightsで算出
  6. cdf >= qとなる最初のidxを探す。
    • idxが0の場合、duration for sorted_records[0]を返す。
    • 該当idxがない場合、duration for sorted_records[n]を返す。
  7. 補間割合を算出:
    • lower_cdf = sorted_records[idx-1]のcdf
    • upper_cdf = sorted_records[idx]のcdf
    • lower_cdf = upper_cdfならduration for sorted_records[idx]を返す。
    • それ以外の場合:
      • ifrac = (q - lower_cdf) / (upper_cdf - lower_cdf)
      • lower_durationduration for sorted_records[idx-1]とする。
      • upper_durationduration for sorted_records[idx]とする。
      • lower_duration + (upper_duration - lower_duration) * ifrac を返す

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 インターフェースで定義されているタイミング属性を示します。丸括弧付きの属性は、異なるオリジンのドキュメントを含むナビゲーションでは利用できない場合があります。
Navigation Timing attributes

5. ナビゲーションタイミングエントリの作成

ドキュメントは関連付けられたナビゲーションタイミングエントリを持ち、初期状態は未設定です。

ナビゲーションタイミングエントリを作成する には、Document documentについて、 フェッチタイミング情報 fetchTiming、数値 redirectCountNavigationTimingType navigationType、nullまたはサービスワーカータイミング情報 serviceWorkerTiming、 DOMString cacheModeDOMHighResTimeStamp criticalCHRestartレスポンスボディ情報 bodyInfoを受け取り、次の手順を実行します:

  1. globaldocument関連グローバルオブジェクトとする。
  2. navigationTimingEntryを新しいPerformanceNavigationTiming オブジェクトとして globalレルムで作成する。
  3. リソースタイミングエントリのセットアップnavigationTimingEntryに対して "navigation"、 documentURLfetchTimingcacheModebodyInfoを指定して実行する。
  4. navigationTimingEntryドキュメントロードタイミングdocumentロードタイミング情報を設定する。
  5. navigationTimingEntry前回のドキュメントアンロードタイミングdocument前回ドキュメントアンロードタイミングを設定する。
  6. navigationTimingEntryリダイレクト数redirectCountを設定する。
  7. navigationTimingEntryナビゲーションタイプnavigationTypeを設定する。
  8. navigationTimingEntryサービスワーカータイミングserviceWorkerTimingを設定する。
  9. documentナビゲーションタイミングエントリnavigationTimingEntryに設定する。
  10. navigationTimingEntry`Critical-CH`再起動時刻criticalCHRestartを設定する。
  11. navigationTimingEntrynot restored reasons に、 NotRestoredReasonsオブジェクト生成documentnot restored reasons を渡した結果を設定する。
  12. navigationTimingEntryglobalパフォーマンスエントリバッファに追加する。

ナビゲーションタイミングエントリをキューする には、Document documentについて ナビゲーションPerformanceEntryをキューする処理で documentナビゲーションタイミングエントリをキューしてください。

6. プライバシーに関する考慮事項

このセクションは規範的ではありません。

6.1. 情報開示

細工されたタイミング攻撃によって、エンドユーザーの閲覧履歴や活動履歴が漏洩する可能性があります。たとえば、アンロード時間で前ページのアンロードハンドラの実行時間を知ることで、ユーザーのログイン状態を推測できる場合があります。こうした攻撃は、ドキュメントのアンロード時に同一オリジンチェックアルゴリズムを強制することで、 HTML仕様 で対策しています。

同一オリジン制約の緩和では、 ドキュメント間の不正な訪問を十分には防げません。共有ホスティングでは、信頼できない第三者が同じIPアドレス・異なるポートでHTTPサーバーをホストすることが可能です。

6.2. クロスディレクトリアクセス

同じホスト名を共有する異なるページ、例えばユーザー生成コンテンツを持つサイトの異なる著者のコンテンツなどは、 パス名でアクセス制限を行う仕組みが無いため同一オリジンと見なされます。 これらのページ間でナビゲーションすると、遷移先ページが前ページ(リダイレクトやunloadイベントなど)のタイミング情報にアクセスできてしまいます。

7. セキュリティに関する考慮事項

このセクションは規範的ではありません。

PerformanceNavigationTiming インターフェースは 現在のドキュメント へ前のドキュメントに関するタイミング情報を公開します。 前のドキュメントの情報を含むPerformanceNavigationTiming 属性へのアクセスを制限するため、 前ドキュメントアンロードアルゴリズムでは 同一オリジンポリシー を強制し、前のドキュメント由来属性は0に設定されます。

7.1. プロキシサーバーの検出

ユーザーエージェントとWebサーバーの間にプロキシが存在する場合、 connectStartconnectEnd 属性の間隔は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] から内容を確認・取得するのは フェッチ処理の一部です。 これは requestStartresponseStart および 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 TYPE_NAVIGATE = 0;
  const unsigned short TYPE_RELOAD = 1;
  const unsigned short TYPE_BACK_FORWARD = 2;
  const unsigned short TYPE_RESERVED = 255;
  readonly attribute unsigned short type;
  readonly attribute unsigned short redirectCount;
  [Default] object toJSON();
};
TYPE_NAVIGATE

履歴制御動作"default" または "replace" に設定されたナビゲーション。

TYPE_RELOAD

履歴制御動作"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 に感謝します。

適合性

文書の規則

適合性要件は、記述的な主張とRFC 2119用語の組み合わせで表現されます。 この文書の規範的な部分におけるキーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」はRFC 2119で説明されているとおりに解釈されます。 ただし、読みやすさのため、この仕様書ではこれらの単語をすべて大文字で表記していません。

本仕様のすべてのテキストは規範的ですが、明示的に非規範的と記されたセクション、例、注記は例外です。[RFC2119]

この仕様書の例は「例えば」という言葉で導入されるか、class="example"の記法で規範的な本文と区別されます。 例えば、下記のような形式です:

これは情報例の一例です。

情報注記は「注記」で始まり、class="note"で規範的本文と区別されます。 例えば、下記のような形式です:

注記:これは情報注記の例です。

適合アルゴリズム

アルゴリズムの一部として命令形で記述された要件(例えば「先頭の空白文字を削除する」、「偽を返してこれらの手順を中断する」など)は、 アルゴリズム冒頭で使われているキーワード("must"、"should"、"may"等)の意味で解釈してください。

アルゴリズムや手順として記述された適合性要件は、結果が同等であればどんな形でも実装可能です。 この仕様のアルゴリズムは分かりやすさを目的としており、性能重視ではありません。 実装者には最適化を推奨します。

索引

この仕様で定義される用語

参照で定義される用語

参考文献

規範的参考文献

[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HR-TIME]
Yoav Weiss. High Resolution Time. 2024年11月7日. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERFORMANCE-TIMELINE-2]
Nicolas Pena Moreno. Performance Timeline. 2025年5月21日. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RESOURCE-TIMING-2]
Yoav Weiss; Noam Rosenthal. Resource Timing. 2026年2月17日. CRD. URL: https://www.w3.org/TR/resource-timing/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers Nightly. 2026年2月23日. CRD. URL: https://www.w3.org/TR/service-workers/
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[WebIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報

[HR-TIME-2]
Ilya Grigorik. High Resolution Time Level 2. 2019年11月21日. REC. URL: https://www.w3.org/TR/hr-time-2/
[JSMEASURE]
Ramakrishnan Rajamony; Mootaz Elnozahy. Measuring Client-Perceived Response Times on the WWW. 2001年3月. The Proceedings of the 3rd USENIX Symposium on Internet Technologies and Systems (USITS). URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.7329&rep=rep1&type=pdf
[NAVIGATION-TIMING]
Zhiheng Wang. Navigation Timing. 2012年12月17日. REC. URL: https://www.w3.org/TR/navigation-timing/
[RFC2616]
R. Fielding; et al. Hypertext Transfer Protocol -- HTTP/1.1. 1999年6月. Draft Standard. URL: https://www.rfc-editor.org/rfc/rfc2616
[RFC7234]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Caching. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7234.html

IDL索引

[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();
};

enum NavigationTimingType {
    "navigate",
    "reload",
    "back_forward"
};

[Exposed=Window]
interface PerformanceTimingConfidence {
    readonly attribute double randomizedTriggerRate;
    readonly attribute PerformanceTimingConfidenceValue value;
    object toJSON();
};

enum PerformanceTimingConfidenceValue {
  "high",
  "low"
};

[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();
};

[Exposed=Window]
interface PerformanceNavigation {
  const unsigned short TYPE_NAVIGATE = 0;
  const unsigned short TYPE_RELOAD = 1;
  const unsigned short TYPE_BACK_FORWARD = 2;
  const unsigned short TYPE_RESERVED = 255;
  readonly attribute unsigned short type;
  readonly attribute unsigned short redirectCount;
  [Default] object toJSON();
};

[Exposed=Window]
partial interface Performance {
  [SameObject]
  readonly attribute PerformanceTiming timing;
  [SameObject]
  readonly attribute PerformanceNavigation navigation;
};