Node.js perf_hooks モジュール
Node.js のperf_hooksモジュールはパフォーマンス監視ツールであり、開発者がアプリケーション内でコードの実行パフォーマンスを測定および監視できるようにします。このモジュールは高精度のパフォーマンス計時機能を提供し、コード内のパフォーマンスボトルネックを特定するのに役立ちます。
perf_hooksは "Performance Hooks" の略称で、Web Performance API 標準に基づいて実装されており、Node.js アプリケーションにパフォーマンス測定機能を提供します。
perf_hooks のコア機能
1. パフォーマンス計時
perf_hooksモジュールはコードブロックの実行時間を正確に測定でき、精度はナノ秒レベルに達することができます。
2. リソース監視
Node.js プロセスのリソース使用状況を監視できます。CPU 時間、メモリ使用量などが含まれます。
3. パフォーマンス観察
オブザーバーパターンを提供し、特定のタイプのパフォーマンス指標を継続的に監視できます。
perf_hooks の使用方法
まず、以下をインポートする必要があります。perf_hooksモジュール:
基本的なパフォーマンス測定の例
例
// 開始時間を記録
const startTime = performance.now();
// 何らかの操作を実行
for (let i = 0; i < 1000000; i++) {
Math.sqrt(i);
}
// 終了時間を記録
const endTime = performance.now();
console.log(`このコードの実行にかかった時間: ${endTime - startTime}ミリ秒`);
PerformanceObserver の使用
PerformanceObserverパフォーマンスエントリを監視して応答できます:
例
const obs = new PerformanceObserver((items) => {
console.log(items.getEntries()[0].duration);
performance.clearMarks();
});
obs.observe({ entryTypes: ['measure'] });
performance.mark('A');
doSomeLongOperation();
performance.mark('B');
performance.measure('A to B', 'A', 'B');
perf_hooks の主要 API
1. performance.now()
現在の高精度タイムスタンプを返します。単位はミリ秒です。
2. performance.mark(name)
パフォーマンスタイムラインに名前付きのタイムスタンプマークを作成します。
3. performance.measure(name, startMark, endMark)
2つのマーク間の時間間隔を測定します。
4. PerformanceObserver
パフォーマンス測定イベントを観察するためのクラスです。
5. performance.timerify(fn)
関数をラップして、その実行時間を測定できるようにします。
実際の応用シナリオ
1. API 応答時間の監視
例
app.use((req, res, next) => {
const start = performance.now();
res.on('finish', () => {
console.log(`${req.method} ${req.url} ${performance.now() - start}ms`);
});
next();
});
2. 関数パフォーマンス分析
例
const obs = new PerformanceObserver((list) => {
const entries = list.getEntries();
entries.forEach((entry) => {
console.log(`Function ${entry.name} took ${entry.duration}ms`);
});
});
obs.observe({ entryTypes: ['function'] });
function slowFunction() {
// 時間のかかる操作
}
// timerify で関数をラップ
const timedSlowFunction = performance.timerify(slowFunction);
timedSlowFunction();
注意事項
perf_hooksのパフォーマンス測定自体にある程度のパフォーマンスオーバーヘッドが発生するため、本番環境では慎重に使用する必要があります。時間測定の結果はシステム負荷やその他の要因の影響を受けるため、複数回測定して平均値を取るべきです。
Node.js の異なるバージョンでは、
perf_hooksの実装が異なる場合があるため、バージョンの互換性に注意する必要があります。非常に短い操作(ナノ秒レベル)の場合、測定結果が十分に正確でない可能性があります。
まとめ
Node.js のperf_hooksモジュールは開発者に強力なパフォーマンス監視機能を提供し、コード内のパフォーマンスボトルネックの特定と最適化に役立ちます。適切に使用することで、performanceとPerformanceObserver開発者は正確なパフォーマンスデータを取得でき、より的を絞った最適化の決定を行うことができます。
実際のプロジェクトでは、パフォーマンス監視をログシステムと統合し、長期的なパフォーマンスベースラインを確立して、パフォーマンス低下の問題を早期に発見できるようにすることをお勧めします。
その他の拡張
Node.js 組み込みモジュール