高解像度タイマーは、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 で利用できます。