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アプリケーションのパフォーマンス計測をより正確に行うことができます。特にマイクロ最適化やパフォーマンスチューニングを行う際には、必須のツールとなるでしょう。