當毫秒不足時 - 現在效能低下

高解析度計時器是由 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。