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

Paul Irish

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。