高解析度計時器是由 WebPerf 工作小組新增,可在網路平台中進行評估,比 +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 紀元起算的毫秒數,但網頁應用程式很少需要知道現在與 1970 年之間的距離。這個數字會與網頁相關,因為您會比較兩個或多個評估項目。
單調時間
另一個額外的好處是,您可以依賴時間的單調性。請讓 WebKit 工程師 Tony Gentilcore 來說明這個問題:
應用實例
在某些情況下,您會使用這項高解析度計時器,而非取得基本時間戳記:
- 基準測試
- 遊戲或動畫的執行循環程式碼
- 精確計算影格速率
- 在動畫或其他以時間為準的序列中,指定在特定時間點發生動作或音訊
可用性
高解析度計時器目前在 Chrome (穩定版) 中以 window.performance.webkitNow()
的形式提供,這個值通常等於傳遞至 requestAnimationFrame 回呼的新的引數值。WebKit 很快就會移除前置字串,這項功能可透過 performance.now()
使用。特別是 WebPerfWG,由微軟的 Jatinder Mann 領軍,在移除前置字元後,很快就成功推出功能。
簡單來說,performance.now()
是...
- 以微秒為小數部分的雙精度
- 以頁面的
navigationStart
為基準,而非以 UNIX 紀元為基準 - 系統時間變更時不會偏移
- 適用於 Chrome 穩定版、Firefox 15 以上版本和 IE10。