Performance: timeOrigin 屬性
注意:此功能在 Web Workers 中可用。
Performance 介面的只讀屬性 timeOrigin 返回一個高解析度時間戳,用作與效能相關的各個時間戳的基準。
在 Window 上下文中,此值代表導航開始的時間。在 Worker 和 ServiceWorker 上下文中,此值代表 worker 執行的時間。您可以使用此屬性來同步不同上下文之間的時間基準(請參閱下面的示例)。
注意: performance.timeOrigin 的值可能與在 time origin 時執行的 Date.now() 返回的值不同,因為 Date.now() 可能會受到系統和使用者時鐘調整、時鐘偏差等因素的影響。timeOrigin 屬性是一個 單調時鐘,其當前時間永不減小,並且不受這些調整的影響。
值
一個高解析度時間戳,被認為是當前文件生命週期的開始。它的計算方式如下:
-
如果指令碼的 全域性物件 是一個
Window,則 time origin 的確定方式如下:- 如果當前
Document是在Window中載入的第一個文件,則 time origin 是瀏覽器上下文建立時的時間。 - 如果在解除安裝之前在視窗中載入的文件的過程中,顯示了確認對話方塊,以允許使用者確認是否離開上一頁,則 time origin 是使用者確認導航到新頁面可接受時的時間。
- 如果以上任一情況均未確定 time origin,則 time origin 是導致視窗當前
Document出現的導航發生時的時間。
- 如果當前
-
如果指令碼的全域性物件是
WorkerGlobalScope(即指令碼作為 web worker 執行),則 time origin 是 worker 被建立時的時刻。 -
在所有其他情況下,time origin 為 undefined。
示例
同步上下文之間的時間
為了解決視窗和 worker 上下文中不同的 time origin 問題,您可以透過 timeOrigin 屬性來轉換來自 worker 指令碼的時間戳,從而使整個應用程式的計時保持同步。
在 worker.js 中
js
self.addEventListener("connect", (event) => {
const port = event.ports[0];
port.onmessage = (event) => {
const workerTaskStart = performance.now();
// doSomeWork()
const workerTaskEnd = performance.now();
};
// Convert worker-relative timestamps to absolute timestamps, then send to the window
port.postMessage({
startTime: workerTaskStart + performance.timeOrigin,
endTime: workerTaskEnd + performance.timeOrigin,
});
});
在 main.js 中
js
const worker = new SharedWorker("worker.js");
worker.port.addEventListener("message", (event) => {
// Convert absolute timestamps into window-relative timestamps
const workerTaskStart = event.data.startTime - performance.timeOrigin;
const workerTaskEnd = event.data.endTime - performance.timeOrigin;
console.log("Worker task start: ", workerTaskStart);
console.log("Worker task end: ", workerTaskEnd);
});
規範
| 規範 |
|---|
| 高精度時間 # dom-performance-timeorigin |
瀏覽器相容性
載入中…