performance.now() メソッドは、ミリ秒単位で計測された DOMHighResTimeStamp を返します。

タイムスタンプは実際には高解像度ではありません。Spectre のようなセキュリティ上の脅威を軽減するために、ブラウザは現在、さまざまな程度まで結果を丸めています (Firefox は Firefox 59 から 2 ミリ秒に丸めています)。ブラウザによっては、タイムスタンプを少しランダム化するものもあります。 精度は将来のリリースで改善されることでしょう。ブラウザの開発者は、これらのタイミング攻撃と、それを軽減する最善策について調査しています。

註: この機能は Web Workers 内で利用可能です。

戻り値は、time origin からの経過時間を表します。

次の点に留意してください:

  • Window コンテキストから生成された Dedicated Worker (専用ワーカー) では、この値は生成元の window におけるperformance.now() の値よりも小さい値となるでしょう。従来はメインコンテキストの t0 と同じでしたが、これは変わりました。
  • Shared Worker または Service Worker では、この値はメインコンテキストでの値よりも大きくなるかもしれません。そのウィンドウは、それらワーカー以後に生成され得るためです。

構文

t = performance.now();

var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");

JavaScript で利用できる他のタイミングデータ (例えば Date.now) とは違い、 performance.now() が返すタイムスタンプは、1ミリ秒の分解能に制限されません。その代わりに、マイクロ秒までの精度を持った浮動小数点の値で表します。

また、Date.now() とは違い、performance.now() が返す値は、常に一定の割合で増加します。システムクロック (これはマニュアルで調整、またはNTPのようなソフトウェアで変えられているかもしれません) から独立しているのです。他方で performance.timing.navigationStart + performance.now() は、おおよそ Date.now() と同じになるでしょう。

時間精度の引き下げ

タイミング攻撃やフィンガープリンティングから保護するため、ブラウザの設定によっては、performance.now() の精度が丸められることがあります。
Firefoxでは、privacy.reduceTimerPrecision の設定がデフォルトで有効になっており、Firefox 59 ではデフォルトで 20 us (マイクロ秒) に設定されています。 Firefox 60 では 2 ms (ミリ秒) になります。

// Firefox 60 での時間精度の引き下げ (2ms)
performance.now();
// 8781416
// 8781814
// 8782206
// ...


// `privacy.resistFingerprinting` 有効化による時間精度の引き下げ`
performance.now();
// 8865400
// 8866200
// 8866700
// ...

Firefoxでは privacy.resistFingerprinting も有効にできます。これは、精度を 100 ms か privacy.resistFingerprinting.reduceTimerPrecision.microseconds のどちらか大きい方へ変更します。

仕様

仕様書 策定状況 コメント
High Resolution Time Level 2
performance.now() の定義
勧告候補 インターフェイスと型について、より厳密な定義
High Resolution Time
performance.now() の定義
勧告 初期定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応Chrome 完全対応 24Edge 完全対応 ありFirefox 完全対応 15
補足
完全対応 15
補足
補足 In Firefox 57.0.4 the accuracy was reduced to 20 microseconds.
補足 In Firefox 59 the accuracy was reduced to 2 milliseconds.
IE 完全対応 10Opera 完全対応 15Safari 完全対応 8WebView Android 完全対応 ありChrome Android 完全対応 25Edge Mobile 完全対応 ありFirefox Android 完全対応 15
補足
完全対応 15
補足
補足 In Firefox 57.0.4 the accuracy was reduced to 20 microseconds.
補足 In Firefox 59 the accuracy was reduced to 2 milliseconds.
Opera Android 未対応 なしSafari iOS 完全対応 9Samsung Internet Android ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: sutara79, takamin
最終更新者: sutara79,