Performance: now() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

注意:此功能在 Web Workers 中可用。

performance.now() 方法返回一個高精度毫秒級時間戳。它表示自 Performance.timeOrigin(在視窗上下文中導航開始的時間,或在 WorkerServiceWorker 上下文中 worker 啟動的時間)以來經過的時間。

語法

js
now()

引數

無。

返回值

返回一個以毫秒為單位測量的 DOMHighResTimeStamp

描述

Performance.nowDate.now 對比

Date.now 不同,performance.now() 返回的時間戳不限於一毫秒的解析度。相反,它們以浮點數表示時間,精度高達微秒。

此外,Date.now() 可能受到系統和使用者時鐘調整、時鐘偏差等因素的影響,因為它相對於 Unix 紀元(1970-01-01T00:00:00Z)且依賴於系統時鐘。而 performance.now() 方法則相對於 timeOrigin 屬性,這是一個 單調時鐘:其當前時間永遠不會減少,也不會受到調整的影響。

performance.now 規範變更

performance.now() 方法的語義在 High Resolution Time Level 1 和 Level 2 之間發生了變化。

變更 Level 1 Level 2
相對於 performance.timing.navigationStart Performance.timeOrigin
觸發條件 文件獲取或解除安裝提示(如果有)。 瀏覽上下文的建立(如果沒有先前文件)、解除安裝提示(如果有),或導航的開始(根據 HTML 定義,發生在獲取之前幾個步驟)。

performance.now() 方法曾經相對於導航時間規範中的 performance.timing.navigationStart 屬性。現在這一行為已改變,performance.now() 現在相對於 Performance.timeOrigin,這可以避免跨網頁比較時間戳時的時鐘更改風險。

js
// Level 1 (clock change risks)
currentTime = performance.timing.navigationStart + performance.now();

// Level 2 (no clock change risks)
currentTime = performance.timeOrigin + performance.now();

睡眠期間的計時

規範(Level 2)要求 performance.now() 在作業系統睡眠或瀏覽器程序以任何方式凍結時應繼續計時。似乎只有 Windows 上的瀏覽器在睡眠期間會繼續計時。其他作業系統的相關瀏覽器 bug

  • Chrome/Chromium (bug)
  • Firefox (bug)
  • Safari/WebKit (bug)

根據您的用例,這種差異可能很重要,也可能不重要。例如,如果您正在計時短時間操作(如載入影像),在此期間系統不太可能睡眠,這可能不會引起任何問題。如果您正在計時長時間操作,您可能會發現 Date.now() 更能避免這些限制,因為 performance.now() 的高精度在這種情況下可能並非至關重要。

您還可以在規範問題 hr-time#115 中找到更多詳細資訊。

安全要求

為了防止定時攻擊和 指紋識別performance.now() 會根據文件是否 跨域隔離 來進行粗化處理。

  • 隔離上下文中的解析度:5 微秒
  • 非隔離上下文中的解析度:100 微秒

您可以使用 Window.crossOriginIsolatedWorkerGlobalScope.crossOriginIsolated 屬性來檢查文件是否跨域隔離。

js
if (crossOriginIsolated) {
  // Use measureUserAgentSpecificMemory
}

示例

使用 performance.now()

要確定程式碼中的特定點以來經過了多少時間,您可以這樣做:

js
const t0 = performance.now();
doSomething();
const t1 = performance.now();
console.log(`Call to doSomething took ${t1 - t0} milliseconds.`);

規範

規範
高精度時間
# dom-performance-now

瀏覽器相容性

另見