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

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-navigation-timing-2-20260901/
最新版公開バージョン:
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 を実装するユーザーエージェントは、 Window コンテキストの supportedEntryTypes に "navigation" を含める必要がある。 これにより、開発者は Navigation Timing のサポートを検出できる。

s

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

PerformanceNavigationTiming インターフェイスは、PerformanceResourceTiming インターフェイスの次の属性を拡張する:

パフォーマンスタイムラインに含まれるのは 現在の文書 リソースのみであり、パフォーマンスタイムラインには PerformanceNavigationTiming オブジェクトが 1 つだけ存在する。

3.3. PerformanceNavigationTiming インターフェース

HTTP キャッシュ [RFC9111]からの 内容の確認および取得は、 フェッチ処理の一部である。 これは、 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 ゲッターの手順 は、次の手順を実行する:

  1. this の 文書読み込みタイミングの DOM interactive 時刻が 0 の場合、null を返す。
  2. this の 信頼度値が null でない場合、 それを返す。
  3. confidence を、 this の 関連する設定オブジェクトの 関連するレルムで作成された新しい PerformanceTimingConfidence オブジェクトとする。
  4. confidence の randomizedTriggerRate を this の ランダム化トリガー率に設定する。
  5. confidence の value を、次のアルゴリズムで決定される値に設定する:
    1. p を confidence の randomizedTriggerRate とする。
    2. underlying を this の 基礎となる信頼度 値、すなわち PerformanceTimingConfidenceValue とする。
    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に基づく重み付け方法を示します。

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

  1. 各レコードについて:
    • 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)
      wは一部レコードで負の値になることがありますが、全てのレコードを保持してください。
    • weighted_durationをduration * wで算出。
  2. total_weighted_durationを全レコードのweighted_duration合計とする。
  3. sum_weightsを全レコードのw合計とする。
  4. debiased_mean = total_weighted_duration / sum_weights(sum_weightsが極端にゼロでなければ)。

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

  1. 偏り補正平均と同じ手順で各レコードの重みwを算出。
  2. sum_weightsを全レコードのw合計とする。
  3. sorted_recordsをduration順(昇順)でソート。
  4. 目的のpercentile(0-100)で q = percentile / 100.0
  5. sorted_recordsを各レコードについて:
    • 各レコードで累積重みcwを算出: cw = sum_{i: duration_i <= duration_j} w_i
    • 累積分布関数cdfを cdf = 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_durationをduration for sorted_records[idx-1]とする。
      • upper_durationをduration 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, 型は 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 インターフェースで定義されているタイミング属性を示します。丸括弧付きの属性は、異なるオリジンのドキュメントを含むナビゲーションでは利用できない場合があります。
Navigation Timing attributes

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

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

Document document のナビゲーションタイミングエントリを作成するには、 フェッチタイミング情報 fetchTiming、数値 redirectCount、 NavigationTimingType navigationType、null またはサービスワーカータイミング情報 serviceWorkerTiming、 DOMString cacheMode、DOMHighResTimeStamp criticalCHRestart、およびレスポンスボディ 情報 bodyInfo が与えられたとき、次を行う:

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

この属性は、最後の非リダイレクト ナビゲーションの種別を返さなければならない。 これは、次のナビゲーション種別 値のいずれかでなければならない。

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 に感謝します。

適合性

文書の規則

適合性要件は、記述的な主張と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 標準. 現行標準. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch 標準. 現行 標準. URL: https://fetch.spec.whatwg.org/
[HR-TIME]
Yoav Weiss. 高解像度時間. 2026年3月24日. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; et al. HTML 標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. 現行標準. URL: https://infra.spec.whatwg.org/
[PERFORMANCE-TIMELINE-2]
Nicolas Pena Moreno. パフォーマンス タイムライン. 2025年5月21日. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RESOURCE-TIMING-2]
Yoav Weiss; Noam Rosenthal. リソース タイミング. 2026年4月20日. CRD. URL: https://www.w3.org/TR/resource-timing/
[RFC2119]
S. Bradner. 要件レベルを 示すために RFC で使用するキーワード. 1997年3月. 現行最良慣行. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC9111]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP キャッシュ. 2022年6月. インターネット 標準. URL: https://httpwg.org/specs/rfc9111.html
[RFC9112]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP/1.1. 2022年6月. インターネット標準. URL: https://httpwg.org/specs/rfc9112.html
[SERVICE-WORKERS]
Monica CHINTALA; Yoshisato Yanagisawa. Service Workers ナイトリー. 2026年8月12日. CRD. URL: https://www.w3.org/TR/service-workers/
[URL]
Anne van Kesteren. URL 標準. 現行標準. URL: https://url.spec.whatwg.org/
[WebIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. 現行 標準. URL: https://webidl.spec.whatwg.org/

参考情報

[HR-TIME-2]
Ilya Grigorik. 高解像度時間 レベル 2. 2019年11月21日. REC. URL: https://www.w3.org/TR/hr-time-2/
[JSMEASURE]
Ramakrishnan Rajamony; Mootaz Elnozahy. WWW における クライアントが知覚する応答時間の測定. 2001年3月. 第3回 USENIX インターネット技術およびシステムシンポジウム(USITS)予稿集. URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.7329&rep=rep1&type=pdf
[NAVIGATION-TIMING]
Zhiheng Wang. ナビゲーションタイミング. 2012年12月17日. REC. URL: https://www.w3.org/TR/navigation-timing/

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;
};