Модуль perf_hooks Node.js

Java FileВстроенные модули Node.js


Node.jsperf_hooksЭтот модуль — инструмент мониторинга производительности, позволяющий разработчикам измерять и отслеживать производительность выполнения кода в приложениях. Этот модуль предоставляет высокоточные функции измерения времени выполнения, помогающие выявить узкие места производительности в коде.

perf_hooksЭто аббревиатура от "Performance Hooks". Основан на стандарте Web Performance API и предоставляет возможности измерения производительности для приложений Node.js.


Основные возможности perf_hooks

1. Измерение производительности

perf_hooksМодуль позволяет точно измерять время выполнения блоков кода с точностью до наносекунд.

2. Мониторинг ресурсов

Он может отслеживать использование ресурсов процессами Node.js, включая время ЦП, использование памяти и т. д.

3. Наблюдение за производительностью

Он предоставляет шаблон наблюдателя для непрерывного мониторинга определённых типов метрик производительности.


Как использовать perf_hooks

Сначала нужно импортироватьperf_hooksмодуль:

const { performance, PerformanceObserver } = require('perf_hooks');

Базовый пример измерения производительности

Пример

const { performance } = require('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 { PerformanceObserver, performance } = require('perf_hooks');

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 до B', 'A', 'B');

Основные API perf_hooks

1. performance.now()

Возвращает текущую высокоточную метку времени в миллисекундах.

2. performance.mark(name)

Создает именованную метку времени во временной шкале производительности.

3. performance.measure(name, startMark, endMark)

Измеряет временной интервал между двумя маркерами.

4. PerformanceObserver

Класс, используемый для наблюдения за событиями измерения производительности.

5. performance.timerify(fn)

Оборачивает функцию, чтобы можно было измерить время ее выполнения.


Практические сценарии применения

1. Мониторинг времени отклика API

Пример

const { performance } = require('perf_hooks');

app.use((req, res, next) => {
    const start = performance.now();
    res.on('finish', () => {
        console.log(`${req.method} ${req.url} ${performance.now() - start}ms`);
    });
    Далее();
});

2. Анализ производительности функций

Пример

const { performance, PerformanceObserver } = require('perf_hooks');

const obs = new PerformanceObserver((list) => {
    const entries = list.getEntries();
    entries.forEach((entry) => {
        console.log(`Функция ${entry.name} заняла ${entry.duration}ms`);
    });
});
obs.observe({ entryTypes: ['function'] });

function slowFunction() {
    // Некоторые длительные операции
}

// Используйте timerify, чтобы обернуть функцию
const timedSlowFunction = performance.timerify(slowFunction);

timedSlowFunction();

Меры предосторожности

  1. perf_hooksСамо измерение производительности влечёт некоторые накладные расходы, поэтому в производственных средах его следует использовать с осторожностью.

  2. На результаты измерения времени влияют системная нагрузка и другие факторы, поэтому следует выполнять несколько измерений и усреднять их.

  3. В разных версиях Node.js,perf_hooksреализация может отличаться, и следует учитывать совместимость версий.

  4. Для очень коротких операций (наносекундного уровня) результаты измерений могут быть недостаточно точными.


Итог

Node.jsperf_hooksМодуль предоставляет разработчикам мощные возможности мониторинга производительности, помогая выявлять и оптимизировать узкие места производительности в коде. При разумном использованииperformanceиPerformanceObserver, разработчики могут получать точные данные о производительности, что позволяет принимать более целенаправленные решения по оптимизации.

В реальных проектах рекомендуется интегрировать мониторинг производительности с системой логирования и устанавливать долгосрочные базовые показатели производительности для своевременного выявления проблем регрессии производительности.

Java FileВстроенные модули Node.js

Другие расширения