API измерения производительности¶
Стабильность: 2 — Стабильная
Модуль реализует подмножество спецификации W3C Web Performance APIs и дополнительные API для измерений производительности, специфичных для Node.js.
В Node.js поддерживаются следующие Web Performance APIs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
perf_hooks.performance¶
Объект, с помощью которого можно собирать метрики производительности текущего экземпляра Node.js. По смыслу похож на window.performance в браузерах.
performance.clearMarks([name])¶
name<string>
Если name не указано, удаляет все объекты PerformanceMark из временной шкалы производительности (Performance Timeline). Если name указано, удаляется только соответствующая метка.
performance.clearMeasures([name])¶
name<string>
Если name не указано, удаляет все объекты PerformanceMeasure из временной шкалы производительности. Если name указано, удаляется только соответствующая мера.
performance.clearResourceTimings([name])¶
name<string>
Если name не указано, удаляет все объекты PerformanceResourceTiming из шкалы ресурсов (Resource Timeline). Если name указано, удаляется только соответствующий ресурс.
performance.eventLoopUtilization([utilization1[, utilization2]])¶
utilization1<Object>Результат предыдущего вызоваeventLoopUtilization().utilization2<Object>Результат предыдущего вызоваeventLoopUtilization()до моментаutilization1.- Возвращает:
<Object>
Псевдоним perf_hooks.eventLoopUtilization().
Это свойство — расширение Node.js. В веб-браузерах недоступно.
performance.getEntries()¶
- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime. Если нужны только записи определённых типов или с определёнными именами, см. performance.getEntriesByType() и performance.getEntriesByName().
performance.getEntriesByName(name[, type])¶
name<string>type<string>- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime, у которых performanceEntry.name равен name, а при необходимости и performanceEntry.entryType равен type.
performance.getEntriesByType(type)¶
type<string>- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime, у которых performanceEntry.entryType равен type.
performance.mark(name[, options])¶
Создаёт новую запись PerformanceMark на временной шкале производительности. PerformanceMark — подкласс PerformanceEntry, у которого performanceEntry.entryType всегда 'mark', а performanceEntry.duration всегда 0. Метки используются, чтобы отмечать важные моменты на временной шкале.
Созданная запись PerformanceMark попадает в глобальную временную шкалу и запрашивается через performance.getEntries, performance.getEntriesByName и performance.getEntriesByType. После наблюдения записи следует вручную очистить из глобальной шкалы вызовом performance.clearMarks.
performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, global, cacheMode, bodyInfo, responseStatus[, deliveryType])¶
timingInfo<Object>Fetch Timing InforequestedUrl<string>URL ресурсаinitiatorType<string>Имя инициатора, например'fetch'global<Object>cacheMode<string>Режим кэша: пустая строка ('') или'local'bodyInfo<Object>Fetch Response Body InforesponseStatus<number>Код статуса ответаdeliveryType<string>Тип доставки. По умолчанию:''.
Это свойство — расширение Node.js. В веб-браузерах недоступно.
Создаёт новую запись PerformanceResourceTiming на шкале ресурсов. PerformanceResourceTiming — подкласс PerformanceEntry, у которого performanceEntry.entryType всегда 'resource'. Такие записи отмечают моменты на шкале ресурсов.
Созданная запись попадает в глобальную шкалу ресурсов и запрашивается через performance.getEntries, performance.getEntriesByName и performance.getEntriesByType. После наблюдения записи следует вручную очистить глобальную шкалу вызовом performance.clearResourceTimings.
performance.measure(name[, startMarkOrOptions[, endMark]])¶
name<string>startMarkOrOptions<string>|<Object>Необязательно.detail<any>Дополнительные необязательные сведения для измерения.duration<number>Длительность между началом и концом.end<number>|<string>Метка времени конца или строка с именем ранее записанной метки.start<number>|<string>Метка времени начала или строка с именем ранее записанной метки.
endMark<string>Необязательно. Не указывается, еслиstartMarkOrOptions— Object.
Создаёт новую запись PerformanceMeasure на временной шкале производительности. PerformanceMeasure — подкласс PerformanceEntry, у которого performanceEntry.entryType всегда 'measure', а performanceEntry.duration — число миллисекунд между startMark и endMark.
Аргумент startMark может ссылаться на любую существующую PerformanceMark на шкале или на свойства меток времени класса PerformanceNodeTiming. Если метки с указанным именем нет, выбрасывается ошибка.
Необязательный аргумент endMark должен ссылаться на существующую PerformanceMark или на свойства меток времени PerformanceNodeTiming. Если параметр не передан, endMark берётся как performance.now(); если указанное имя не существует — ошибка.
Созданная запись попадает в глобальную временную шкалу и запрашивается через performance.getEntries, performance.getEntriesByName и performance.getEntriesByType. После наблюдения записи следует вручную очистить шкалу вызовом performance.clearMeasures.
performance.nodeTiming¶
Это свойство — расширение Node.js. В веб-браузерах недоступно.
Экземпляр класса PerformanceNodeTiming с метриками производительности для отдельных этапов работы Node.js.
performance.now()¶
- Возвращает:
<number>
Возвращает текущую метку времени в миллисекундах с высоким разрешением; 0 соответствует началу текущего процесса node.
performance.setResourceTimingBufferSize(maxSize)¶
Задаёт размер глобального буфера записей ресурсов (число объектов записей типа "resource").
По умолчанию максимальный размер буфера — 250.
performance.timeOrigin¶
- Тип:
<number>
timeOrigin — метка времени в миллисекундах с высоким разрешением момента запуска текущего процесса node в Unix-времени.
performance.timerify(fn[, options])¶
fn<Function>options<Object>histogram<RecordableHistogram>Гистограмма, созданная черезperf_hooks.createHistogram(); записывает длительности выполнения в наносекундах.
Псевдоним perf_hooks.timerify().
Это свойство — расширение Node.js. В веб-браузерах недоступно.
performance.toJSON()¶
Объект — JSON-представление performance. По смыслу похож на window.performance.toJSON в браузерах.
Событие: 'resourcetimingbufferfull'¶
Событие 'resourcetimingbufferfull' возникает, когда глобальный буфер записей ресурсов заполнен. Измените размер буфера через performance.setResourceTimingBufferSize() или очистите его через performance.clearResourceTimings() в обработчике, чтобы можно было добавить новые записи на временную шкалу.
Класс: PerformanceEntry¶
Конструктор этого класса пользователям напрямую недоступен.
performanceEntry.duration¶
- Тип:
<number>
Общее число миллисекунд для этой записи. Для не всех типов записей значение осмысленно.
performanceEntry.entryType¶
- Тип:
<string>
Тип записи производительности. Возможные значения:
'dns'(только Node.js)'function'(только Node.js)'gc'(только Node.js)'http2'(только Node.js)'http'(только Node.js)'mark'(доступно в вебе)'measure'(доступно в вебе)'net'(только Node.js)'node'(только Node.js)'resource'(доступно в вебе)
performanceEntry.name¶
- Тип:
<string>
Имя записи производительности.
performanceEntry.startTime¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент начала записи Performance Entry.
Класс: PerformanceMark¶
- Наследует:
<PerformanceEntry>
Представляет метки, созданные методом Performance.mark().
performanceMark.detail¶
- Тип:
<any>
Дополнительные сведения, заданные при создании через Performance.mark().
Класс: PerformanceMeasure¶
- Наследует:
<PerformanceEntry>
Представляет измерения, созданные методом Performance.measure().
Конструктор этого класса пользователям напрямую недоступен.
performanceMeasure.detail¶
- Тип:
<any>
Дополнительные сведения, заданные при создании через Performance.measure().
Класс: PerformanceNodeEntry¶
- Наследует:
<PerformanceEntry>
Этот класс — расширение Node.js. В веб-браузерах недоступен.
Подробные данные о тайминге Node.js.
Конструктор этого класса пользователям напрямую недоступен.
performanceNodeEntry.detail¶
- Тип:
<any>
Дополнительные сведения, зависящие от entryType.
performanceNodeEntry.flags¶
Стабильность: 0 — устарело: вместо этого используйте
performanceNodeEntry.detail.
- Тип:
<number>
Когда performanceEntry.entryType равен 'gc', свойство performance.flags содержит дополнительные сведения об операции сборки мусора. Возможные значения:
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NOperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINEDperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCEDperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSINGperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGEperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORYperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
performanceNodeEntry.kind¶
Стабильность: 0 — устарело: вместо этого используйте
performanceNodeEntry.detail.
- Тип:
<number>
Когда performanceEntry.entryType равен 'gc', свойство performance.kind задаёт тип операции сборки мусора. Возможные значения:
perf_hooks.constants.NODE_PERFORMANCE_GC_MAJORperf_hooks.constants.NODE_PERFORMANCE_GC_MINORperf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTALperf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
Сборка мусора ('gc'): подробности¶
Когда performanceEntry.type равен 'gc', свойство performanceNodeEntry.detail будет Object с двумя полями:
kind<number>Одно из:perf_hooks.constants.NODE_PERFORMANCE_GC_MAJORperf_hooks.constants.NODE_PERFORMANCE_GC_MINORperf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTALperf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
flags<number>Одно из:perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NOperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINEDperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCEDperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSINGperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGEperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORYperf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
HTTP ('http'): подробности¶
Когда performanceEntry.type равен 'http', свойство performanceNodeEntry.detail — это Object с дополнительной информацией.
Если performanceEntry.name равен HttpClient, в detail будут поля req, res: req — Object с method, url, headers; res — Object с statusCode, statusMessage, headers.
Если performanceEntry.name равен HttpRequest, структура такая же: req, res с теми же полями.
Это может увеличить расход памяти; используйте только для диагностики, не оставляйте включённым в production по умолчанию.
HTTP/2 ('http2'): подробности¶
Когда performanceEntry.type равен 'http2', performanceNodeEntry.detail — Object с дополнительными сведениями о производительности.
Если performanceEntry.name равен Http2Stream, в detail будут поля:
bytesRead<number>Число байт кадровDATA, полученных для этогоHttp2Stream.bytesWritten<number>Число байт кадровDATA, отправленных для этогоHttp2Stream.id<number>Идентификатор связанногоHttp2StreamtimeToFirstByte<number>Миллисекунды междуPerformanceEntry.startTimeи приёмом первого кадраDATA.timeToFirstByteSent<number>Миллисекунды междуPerformanceEntry.startTimeи отправкой первого кадраDATA.timeToFirstHeader<number>Миллисекунды междуPerformanceEntry.startTimeи приёмом первого заголовка.
Если performanceEntry.name равен Http2Session, в detail будут поля:
bytesRead<number>Число байт, полученных для этогоHttp2Session.bytesWritten<number>Число байт, отправленных для этогоHttp2Session.framesReceived<number>Число кадров HTTP/2, принятыхHttp2Session.framesSent<number>Число кадров HTTP/2, отправленныхHttp2Session.maxConcurrentStreams<number>Максимум одновременно открытых потоков за время жизниHttp2Session.pingRTT<number>Миллисекунды от отправки кадраPINGдо подтверждения; есть только еслиPINGотправлялся наHttp2Session.streamAverageDuration<number>Средняя длительность (мс) по всемHttp2Stream.streamCount<number>Число обработанныхHttp2StreamвHttp2Session.type<string>'server'или'client'— типHttp2Session.
Timerify ('function'): подробности¶
Когда performanceEntry.type равен 'function', performanceNodeEntry.detail — это Array с аргументами измеряемой функции.
Сеть ('net'): подробности¶
Когда performanceEntry.type равен 'net', performanceNodeEntry.detail — Object с дополнительной информацией.
Если performanceEntry.name равен connect, в detail будут host, port.
DNS ('dns'): подробности¶
Когда performanceEntry.type равен 'dns', performanceNodeEntry.detail — Object с дополнительной информацией.
Если performanceEntry.name равен lookup, в detail будут hostname, family, hints, verbatim, addresses.
Если performanceEntry.name равен lookupService, в detail будут host, port, hostname, service.
Если performanceEntry.name равен queryxxx или getHostByAddr, в detail будут host, ttl, result; значение result совпадает с результатом queryxxx или getHostByAddr.
Класс: PerformanceNodeTiming¶
- Наследует:
<PerformanceEntry>
Это свойство — расширение Node.js. В веб-браузерах недоступно.
Сведения о тайминге самого Node.js. Конструктор класса пользователям недоступен.
performanceNodeTiming.bootstrapComplete¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент завершения начальной загрузки процесса Node.js. Если загрузка ещё не завершена, значение −1.
performanceNodeTiming.environment¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент инициализации среды Node.js.
performanceNodeTiming.idleTime¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — время простоя цикла событий в провайдере событий (например epoll_wait). Загрузка CPU не учитывается. Если цикл событий ещё не запущен (например, в первом тике основного скрипта), значение 0.
performanceNodeTiming.loopExit¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент выхода из цикла событий Node.js. Если цикл ещё не завершён, значение −1. Значение, отличное от −1, возможно только в обработчике события 'exit'.
performanceNodeTiming.loopStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент запуска цикла событий Node.js. Если цикл ещё не начался (например, в первом тике основного скрипта), значение −1.
performanceNodeTiming.nodeStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент инициализации процесса Node.js.
performanceNodeTiming.uvMetricsInfo¶
- Возвращает:
<Object>
Обёртка над функцией uv_metrics_info; возвращает текущие метрики цикла событий.
Рекомендуется читать это свойство внутри функции, запланированной через setImmediate, чтобы не собирать метрики до завершения всех операций, запланированных в текущей итерации цикла.
1 2 3 4 5 | |
1 2 3 4 5 | |
performanceNodeTiming.v8Start¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент инициализации платформы V8.
Класс: PerformanceResourceTiming¶
- Наследует:
<PerformanceEntry>
Подробные сетевые метрики времени загрузки ресурсов приложения.
Конструктор этого класса пользователям напрямую недоступен.
performanceResourceTiming.workerStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — момент непосредственно перед отправкой запроса fetch. Если ресурс не перехвачен worker, свойство всегда 0.
performanceResourceTiming.redirectStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — начало выборки, инициировавшей редирект.
performanceResourceTiming.redirectEnd¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — сразу после получения последнего байта ответа последнего редиректа.
performanceResourceTiming.fetchStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — непосредственно перед началом выборки ресурса в Node.js.
performanceResourceTiming.domainLookupStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — непосредственно перед началом DNS-запроса для ресурса.
performanceResourceTiming.domainLookupEnd¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — сразу после завершения DNS-поиска для ресурса.
performanceResourceTiming.connectStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — непосредственно перед установлением соединения с сервером для получения ресурса.
performanceResourceTiming.connectEnd¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — сразу после установления соединения с сервером для получения ресурса.
performanceResourceTiming.secureConnectionStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — непосредственно перед началом рукопожатия для защиты текущего соединения.
performanceResourceTiming.requestStart¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — непосредственно перед получением первого байта ответа от сервера.
performanceResourceTiming.responseEnd¶
- Тип:
<number>
Метка времени в миллисекундах с высоким разрешением — сразу после получения последнего байта ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что наступит раньше.
performanceResourceTiming.transferSize¶
- Тип:
<number>
Число — размер (в октетах) полученного ресурса: поля заголовка ответа плюс тело полезной нагрузки.
performanceResourceTiming.encodedBodySize¶
- Тип:
<number>
Число — размер (в октетах) тела полезной нагрузки, полученного при выборке (HTTP или кэш), до снятия кодирований содержимого.
performanceResourceTiming.decodedBodySize¶
- Тип:
<number>
Число — размер (в октетах) тела сообщения, полученного при выборке (HTTP или кэш), после снятия кодирований содержимого.
performanceResourceTiming.toJSON()¶
Возвращает объект — JSON-представление PerformanceResourceTiming.
Класс: PerformanceObserver¶
PerformanceObserver.supportedEntryTypes¶
- Тип:
<string[]>
Возвращает поддерживаемые типы.
new PerformanceObserver(callback)¶
callback<Function>list<PerformanceObserverEntryList>observer<PerformanceObserver>
Объекты PerformanceObserver уведомляют о появлении новых экземпляров PerformanceEntry на временной шкале производительности.
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Так как экземпляры PerformanceObserver добавляют собственные накладные расходы, их не следует оставлять подписанными бесконечно. Отключайте наблюдателей, как только они не нужны.
Колбэк вызывается, когда PerformanceObserver получает уведомление о новых экземплярах PerformanceEntry. В колбэк передаются экземпляр PerformanceObserverEntryList и ссылка на PerformanceObserver.
performanceObserver.disconnect()¶
Отключает экземпляр PerformanceObserver от всех уведомлений.
performanceObserver.observe(options)¶
options<Object>type<string>Один тип PerformanceEntry. Не указывайте, если уже заданentryTypes.entryTypes<string[]>Массив строк с типами PerformanceEntry, которые интересуют наблюдателя. Если не указан — ошибка.buffered<boolean>Если true, колбэк вызывается со списком глобальных буферизованных записейPerformanceEntry. Если false — только записи, созданные после момента времени. По умолчанию:false.
Подписывает PerformanceObserver на уведомления о новых PerformanceEntry, выбранных через options.entryTypes или options.type:
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
performanceObserver.takeRecords()¶
- Возвращает:
<PerformanceEntry[]>Текущий список записей в наблюдателе; после вызова список очищается.
Класс: PerformanceObserverEntryList¶
Класс PerformanceObserverEntryList даёт доступ к экземплярам PerformanceEntry, переданным в PerformanceObserver. Конструктор класса пользователям недоступен.
performanceObserverEntryList.getEntries()¶
- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
performanceObserverEntryList.getEntriesByName(name[, type])¶
name<string>type<string>- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime, у которых performanceEntry.name равен name, а при необходимости и performanceEntry.entryType равен type.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | |
performanceObserverEntryList.getEntriesByType(type)¶
type<string>- Возвращает:
<PerformanceEntry[]>
Возвращает список объектов PerformanceEntry в хронологическом порядке относительно performanceEntry.startTime, у которых performanceEntry.entryType равен type.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |
perf_hooks.createHistogram([options])¶
options<Object>- Возвращает:
<RecordableHistogram>
Возвращает RecordableHistogram.
perf_hooks.eventLoopUtilization([utilization1[, utilization2]])¶
utilization1<Object>Результат предыдущего вызоваeventLoopUtilization().utilization2<Object>Результат предыдущего вызоваeventLoopUtilization()до моментаutilization1.- Возвращает:
<Object>
Функция eventLoopUtilization() возвращает объект с суммарной длительностью времени, когда цикл событий был и простаивал, и активен, в виде таймера с высоким разрешением в миллисекундах. Поле utilization — рассчитанная утилизация цикла событий (ELU).
Если на главном потоке загрузка ещё не завершена, свойства равны 0. ELU сразу доступен в Worker threads, так как загрузка происходит внутри цикла событий.
Оба параметра utilization1 и utilization2 необязательны.
Если передан utilization1, вычисляется и возвращается дельта между текущими active и idle и соответствующее utilization (аналогично process.hrtime()).
Если переданы оба — utilization1 и utilization2, дельта считается между ними. Это удобно, потому что для ELU недостаточно простого вычитания, в отличие от process.hrtime().
ELU похожа на загрузку CPU, но измеряет только статистику цикла событий, а не CPU. Это доля времени, которую цикл провёл вне провайдера событий (например epoll_wait). Иное время простоя CPU не учитывается. Ниже — пример: в основном простаивающий процесс может иметь высокий ELU.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 | |
Хотя при выполнении этого сценария CPU в основном простаивает, utilization равен 1, потому что child_process.spawnSync() блокирует цикл событий.
Передача произвольного объекта вместо результата предыдущего вызова eventLoopUtilization() даёт неопределённое поведение; возвращаемые значения не гарантируют корректное состояние цикла событий.
perf_hooks.monitorEventLoopDelay([options])¶
options<Object>resolution<number>Период выборки в миллисекундах; должен быть > 0. По умолчанию:10.
- Возвращает:
<IntervalHistogram>
This property is an extension by Node.js. It is not available in Web browsers.
Создаёт объект IntervalHistogram, который снимает и сообщает задержку цикла событий во времени; задержки в наносекундах.
Таймер подходит для оценки задержки цикла, потому что выполнение таймеров привязано к жизненному циклу цикла событий libuv: задержка в цикле задерживает таймер — именно это и предназначено измерять этому API.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
perf_hooks.timerify(fn[, options])¶
fn<Function>options<Object>histogram<RecordableHistogram>Гистограмма, созданная черезperf_hooks.createHistogram(); записывает длительности выполнения в наносекундах.
Это свойство — расширение Node.js. В веб-браузерах недоступно.
Оборачивает функцию в новую, измеряющую время выполнения обёрнутой функции. Чтобы получить детали времени, нужно подписать PerformanceObserver на тип события 'function'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Если обёрнутая функция возвращает промис, к нему добавляется обработчик finally; длительность сообщается после его вызова.
Класс: Histogram¶
histogram.count¶
- Тип:
<number>
Число образцов, записанных в гистограмму.
histogram.countBigInt¶
- Тип:
<bigint>
Число образцов, записанных в гистограмму.
histogram.exceeds¶
- Тип:
<number>
Сколько раз задержка цикла событий превысила порог максимальной задержки 1 час.
histogram.exceedsBigInt¶
- Тип:
<bigint>
Сколько раз задержка цикла событий превысила порог максимальной задержки 1 час.
histogram.max¶
- Тип:
<number>
Максимальная зафиксированная задержка цикла событий.
histogram.maxBigInt¶
- Тип:
<bigint>
Максимальная зафиксированная задержка цикла событий.
histogram.mean¶
- Тип:
<number>
Среднее зафиксированных задержек цикла событий.
histogram.min¶
- Тип:
<number>
Минимальная зафиксированная задержка цикла событий.
histogram.minBigInt¶
- Тип:
<bigint>
Минимальная зафиксированная задержка цикла событий.
histogram.percentile(percentile)¶
Возвращает значение для заданного перцентиля.
histogram.percentileBigInt(percentile)¶
Возвращает значение для заданного перцентиля.
histogram.percentiles¶
- Тип:
<Map>
Возвращает объект Map с накопленным распределением по перцентилям.
histogram.percentilesBigInt¶
- Тип:
<Map>
Возвращает объект Map с накопленным распределением по перцентилям.
histogram.reset()¶
Сбрасывает накопленные данные гистограммы.
histogram.stddev¶
- Тип:
<number>
Стандартное отклонение зафиксированных задержек цикла событий.
Класс: IntervalHistogram extends Histogram¶
Histogram, периодически обновляемый с заданным интервалом.
histogram.disable()¶
- Возвращает:
<boolean>
Отключает таймер обновления. Возвращает true, если таймер остановлен, false, если уже был остановлен.
histogram.enable()¶
- Возвращает:
<boolean>
Включает таймер обновления. Возвращает true, если таймер запущен, false, если уже был запущен.
histogram[Symbol.dispose]()¶
Отключает таймер обновления при освобождении гистограммы.
1 2 3 4 5 6 | |
Клонирование IntervalHistogram¶
Экземпляры IntervalHistogram можно клонировать через MessagePort. На приёмной стороне гистограмма клонируется как обычный Histogram без методов enable() и disable().
Класс: RecordableHistogram extends Histogram¶
histogram.add(other)¶
other<RecordableHistogram>
Добавляет значения из other в эту гистограмму.
histogram.record(val)¶
histogram.recordDelta()¶
Вычисляет время (в наносекундах) с предыдущего вызова recordDelta() и записывает его в гистограмму.
Примеры¶
Измерение длительности асинхронных операций¶
В примере используются Async Hooks и Performance API, чтобы измерить фактическую длительность операции Timeout (включая время выполнения колбэка).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
Сколько времени уходит на загрузку зависимостей¶
Пример измеряет длительность операций require() при загрузке зависимостей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Длительность одного HTTP round-trip¶
Пример показывает время для HTTP-клиента (OutgoingMessage) и HTTP-запроса (IncomingMessage): для клиента — интервал от начала запроса до получения ответа; для запроса — от получения запроса до отправки ответа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Измерение времени net.connect (только для TCP) при успешном подключении¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Измерение времени DNS при успешном запросе¶
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
