JavaScriptで処理時間を正確に計測したい場合、`performance.now()`メソッドが最適な選択肢です。ミリ秒以下の精度で時間を測定できる強力な機能を持っています。

performance.now()の基本的な使い方

performance.now()は、ページナビゲーションの開始時からの経過時間をマイクロ秒単位で返します。以下のように簡単に使用できます:

const start = performance.now();
// 測定したい処理
const end = performance.now();
const executionTime = end - start;
console.log(`実行時間: ${executionTime}ミリ秒`);

Date.now()との違い

従来のDate.now()と比較すると、以下の点でperformance.now()が優れています:

  • より高い精度(マイクロ秒単位)
  • モノトニック(常に増加)な値を返す
  • システム時刻の変更の影響を受けない

実践的な使用例

処理の実行時間を計測する具体例を見てみましょう:

function measurePerformance(func) {
  const start = performance.now();
  func();
  const end = performance.now();
  return end - start;
}

// 使用例
const time = measurePerformance(() => {
  for(let i = 0; i < 1000000; i++) {
    Math.random();
  }
});
console.log(`処理時間: ${time.toFixed(2)}ミリ秒`);

ブラウザサポート状況

performance.now()は現代的なブラウザで広くサポートされています:

  • Chrome 24以降
  • Firefox 15以降
  • Safari 8以降
  • Edge 12以降

セキュリティ対策

2018年以降、タイミング攻撃対策として、多くのブラウザでperformance.now()の精度が意図的に低下されています。必要に応じて以下の対策が可能です:

// 精度を上げる(必要な場合のみ)
if (crossOriginIsolated) {
  performance.timeOrigin = performance.now();
}

ベストプラクティス

  • パフォーマンス計測には常にperformance.now()を使用する
  • 計測結果は小数点以下2桁程度に丸める
  • 大規模なアプリケーションでは、Performance APIの他の機能と組み合わせる

performance.now()を使用することで、JavaScriptアプリケーションのパフォーマンス計測をより正確に行うことができます。特にマイクロ最適化やパフォーマンスチューニングを行う際には、必須のツールとなるでしょう。