ミリ秒単位では不十分な場合 - performance.now

高解像度タイマーは、WebPerf ワーキング グループによって追加されました。これにより、+new Date や新しい Date.now() よりも正確にウェブ プラットフォームで測定できるようになりました。

比較のために、返される値の例を以下に示します。

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

上記の 2 つの値は、桁が大きく異なります。performance.now() は、その特定のページの読み込み開始からの浮動小数点ミリ秒の測定値(具体的には performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) タイムスタンプ)です。Unix エポックからの経過ミリ秒数にすることもできますが、ウェブアプリで現在から 1970 年までの経過時間を把握する必要はほとんどありません。この数値は、2 つ以上の測定値を比較するため、ページを基準としています。

単調増加時間

もう 1 つの利点は、時間の単調増加を信頼できることです。WebKit エンジニアの Tony Gentilcore が説明します。

ユースケース

基本的なタイムスタンプを取得する代わりに、この高解像度タイマーを使用する状況はいくつかあります。

  • ベンチマーク
  • ゲームまたはアニメーションのランループ コード
  • フレームレートを正確に計算する
  • アニメーションやその他の時間ベースのシーケンスの特定の時点でアクションや音声をキューする

対象

高解像度タイマーは現在、Chrome(安定版)で window.performance.webkitNow() として使用できます。この値は通常、requestAnimationFrame コールバックに渡される新しい引数値と同じです。まもなく WebKit の接頭辞が削除され、performance.now() で利用できるようになります。特に、Microsoft の Jatinder Mann が率いる WebPerfWG は、機能を非常に迅速に接頭辞なしにすることに成功しています

performance.now() の概要は次のとおりです。

  • 小数点以下にマイクロ秒を含む double
  • Unix エポックではなく、ページの navigationStart を基準とする
  • システム時間が変更されてもずれない
  • Chrome Stable、Firefox 15 以降、IE10 で利用できます。