導航計時

導航時間 (Navigation Timing) 是 Performance API 的一部分,它提供與頁面導航相關的指標。例如,你可以確定載入或解除安裝文件所需的時間,或者記錄直到 DOM 構建完成並可以與 DOM 互動所需的時間。

它僅包含當前文件,因此通常只有一個 PerformanceNavigationTiming 物件可供觀察。它透過將 entryType 設定為 "navigation" 來擴充套件 PerformanceEntry 介面,並且還繼承自 PerformanceResourceTiming,因此,文件獲取過程中的所有時間戳也都可用。

PerformanceEntry PerformanceResourceTiming PerformanceNavigationTiming

列出文件獲取過程中記錄時間戳的順序的時間戳圖 圖 1. 導航時間戳 (來源)。

文件導航時間戳(除了 資源時間 中的時間戳外)是:

  1. startTime:始終為 0。
  2. unloadEventStart:(如果存在前一個文件)當前文件的 unload 事件處理程式開始之前的那個時間戳。
  3. unloadEventEnd:(如果存在前一個文件)當前文件的 unload 事件處理程式完成之後的那個時間戳。
  4. domInteractive:DOM 構建完成且 JavaScript 可以與之互動的時間戳。
  5. domContentLoadedEventStart:當前文件的 DOMContentLoaded 事件處理程式開始之前的那個時間戳。
  6. domContentLoadedEventEnd:當前文件的 DOMContentLoaded 事件處理程式完成之後的那個時間戳。
  7. domComplete:文件和所有子資源載入完成的時間戳。
  8. loadEventStart:當前文件的 load 事件處理程式開始之前的那個時間戳。
  9. loadEventEnd:當前文件的 load 事件處理程式完成之後的那個時間戳。

其他屬性

PerformanceNavigationTiming 介面提供了額外的屬性,例如返回重定向次數的 redirectCount,以及指示導航型別的 type

示例

domContentLoadedEventEnddomContentLoadedEventStart 時間戳可用於衡量處理 DOMContentLoaded 事件處理程式所需的時間。

此示例使用 PerformanceObserver,當導航效能條目在瀏覽器效能時間線上被記錄時,它會通知呼叫者。該示例使用 buffered 選項來訪問在建立觀察者之前已記錄的條目。

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    const domContentLoadedTime =
      entry.domContentLoadedEventEnd - entry.domContentLoadedEventStart;
    console.log(
      `${entry.name}: DOMContentLoaded processing time: ${domContentLoadedTime}ms`,
    );
  });
});

observer.observe({ type: "navigation", buffered: true });

有關更多示例,請參閱 PerformanceNavigationTiming 參考文件中的屬性頁面。

另見