WebPerf Working Group 新增了高解析度計時器,以便在 Web Platform 中進行評估,比使用 +new Date
和更新版本的 Date.now()
更加精確。
因此,我想先比較一下,系統會傳回下列幾種值:
Date.now() // 1337376068250
performance.now() // 20303.427000007
您會發現這兩個值是許多規模不同的級數。performance.now()
是在特定網頁開始載入後,用來測量浮點毫秒數的數值 (應為特定的 performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
時間戳記)。您可能會提到,自 unix Epoch 時間起算,已經過了毫秒數,但網路應用程式很少需要知道從現在到 1970 之間的距離。這個數字是相對於網頁的實際值,因為您會將兩種以上的測量方式進行比較。
單聲道模式時間
另一個好處是,您可以全然掌握時間的口吻我們讓 WebKit 工程師 Tony Gentilcore 說明這個角色:
應用實例
在下列情況下,您應該使用高解析度計時器,而非擷取基本時間戳記:
- 基準化
- 遊戲或動畫的執行迴圈程式碼
- 精準計算影格速率
- 提示動作或音訊發生在動畫或其他時間順序的特定時間點
適用國家/地區
目前在 Chrome (穩定版) 中可使用 window.performance.webkitNow()
做為高解析度計時器,這個值通常等於傳入 requestAnimationFrame 回呼的新引數值。不久後,WebKit 會捨棄其前置字元,您則可透過 performance.now()
使用此功能。WebPerfWG 特別是由 Microsoft 的 Jatinder Mann 主導,而且功能迅速取消前置字串.
總而言之,performance.now()
為...
- 以小數表示
- 相對於網頁的
navigationStart
(而非 UNIX 週期) - 未在系統時間變更時歪斜
- 適用於 Chrome 穩定版、Firefox 15 以上版本和 IE10。