API de mesure des performances
[Stable: 2 - Stable]
Stable: 2 Stabilité: 2 - Stable
Code source : lib/perf_hooks.js
Ce module fournit une implémentation d’un sous-ensemble des API de performance Web du W3C, ainsi que des API supplémentaires pour les mesures de performance spécifiques à Node.js.
Node.js prend en charge les API de performance Web suivantes :
- Temps haute résolution
- Chronologie des performances
- Chronologie de l’utilisateur
- Chronologie des ressources
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver(items => {
console.log(items.getEntries()[0].duration)
performance.clearMarks()
})
obs.observe({ type: 'measure' })
performance.measure('Début à maintenant')
performance.mark('A')
doSomeLongRunningProcess(() => {
performance.measure('De A à maintenant', 'A')
performance.mark('B')
performance.measure('De A à B', 'A', 'B')
})
const { PerformanceObserver, performance } = require('node:perf_hooks')
const obs = new PerformanceObserver(items => {
console.log(items.getEntries()[0].duration)
})
obs.observe({ type: 'measure' })
performance.measure('Début à maintenant')
performance.mark('A')
;(async function doSomeLongRunningProcess() {
await new Promise(r => setTimeout(r, 5000))
performance.measure('De A à maintenant', 'A')
performance.mark('B')
performance.measure('De A à B', 'A', 'B')
})()
perf_hooks.performance
Ajouté dans : v8.5.0
Un objet qui peut être utilisé pour collecter des métriques de performance à partir de l’instance Node.js actuelle. Il est similaire à window.performance
dans les navigateurs.
performance.clearMarks([name])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v8.5.0 | Ajouté dans : v8.5.0 |
name
<string>
Si name
n'est pas fourni, supprime tous les objets PerformanceMark
de la chronologie des performances. Si name
est fourni, supprime uniquement la marque nommée.
performance.clearMeasures([name])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.7.0 | Ajouté dans : v16.7.0 |
name
<string>
Si name
n'est pas fourni, supprime tous les objets PerformanceMeasure
de la chronologie des performances. Si name
est fourni, supprime uniquement la mesure nommée.
performance.clearResourceTimings([name])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
name
<string>
Si name
n'est pas fourni, supprime tous les objets PerformanceResourceTiming
de la chronologie des ressources. Si name
est fourni, supprime uniquement la ressource nommée.
performance.eventLoopUtilization([utilization1[, utilization2]])
Ajouté dans : v14.10.0, v12.19.0
utilization1
<Object> Le résultat d'un appel précédent àeventLoopUtilization()
.utilization2
<Object> Le résultat d'un appel précédent àeventLoopUtilization()
avantutilization1
.- Retourne : <Object>
La méthode eventLoopUtilization()
retourne un objet qui contient la durée cumulée pendant laquelle la boucle d'événements a été à la fois inactive et active sous forme de temporisateur en millisecondes haute résolution. La valeur utilization
est l'utilisation de la boucle d'événements (ELU) calculée.
Si l'amorçage n'est pas encore terminé sur le thread principal, les propriétés ont la valeur 0
. L'ELU est immédiatement disponible sur les threads de Worker, car l'amorçage se produit dans la boucle d'événements.
Les deux utilization1
et utilization2
sont des paramètres optionnels.
Si utilization1
est passé, alors le delta entre les temps active
et idle
de l'appel actuel, ainsi que la valeur utilization
correspondante sont calculés et retournés (similaire à process.hrtime()
).
Si utilization1
et utilization2
sont tous deux passés, alors le delta est calculé entre les deux arguments. Il s'agit d'une option pratique car, contrairement à process.hrtime()
, le calcul de l'ELU est plus complexe qu'une simple soustraction.
L'ELU est similaire à l'utilisation du CPU, sauf qu'elle ne mesure que les statistiques de la boucle d'événements et non l'utilisation du CPU. Elle représente le pourcentage de temps que la boucle d'événements a passé en dehors du fournisseur d'événements de la boucle d'événements (par ex. epoll_wait
). Aucun autre temps d'inactivité du CPU n'est pris en compte. Voici un exemple de la manière dont un processus principalement inactif aura une ELU élevée.
import { eventLoopUtilization } from 'node:perf_hooks'
import { spawnSync } from 'node:child_process'
setImmediate(() => {
const elu = eventLoopUtilization()
spawnSync('sleep', ['5'])
console.log(eventLoopUtilization(elu).utilization)
})
'use strict'
const { eventLoopUtilization } = require('node:perf_hooks').performance
const { spawnSync } = require('node:child_process')
setImmediate(() => {
const elu = eventLoopUtilization()
spawnSync('sleep', ['5'])
console.log(eventLoopUtilization(elu).utilization)
})
Bien que le CPU soit principalement inactif pendant l'exécution de ce script, la valeur de utilization
est 1
. Cela est dû au fait que l'appel à child_process.spawnSync()
empêche la boucle d'événements de se poursuivre.
Le fait de transmettre un objet défini par l'utilisateur au lieu du résultat d'un appel précédent à eventLoopUtilization()
entraînera un comportement indéfini. Il n'est pas garanti que les valeurs de retour reflètent un état correct de la boucle d'événements.
performance.getEntries()
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.7.0 | Ajouté dans : v16.7.0 |
- Retourne : <PerformanceEntry[]>
Retourne une liste d'objets PerformanceEntry
dans l'ordre chronologique par rapport à performanceEntry.startTime
. Si vous êtes uniquement intéressé par les entrées de performance de certains types ou qui ont certains noms, consultez performance.getEntriesByType()
et performance.getEntriesByName()
.
performance.getEntriesByName(name[, type])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.7.0 | Ajouté dans : v16.7.0 |
name
<string>type
<string>- Retourne : <PerformanceEntry[]>
Retourne une liste d'objets PerformanceEntry
dans l'ordre chronologique par rapport à performanceEntry.startTime
dont performanceEntry.name
est égal à name
, et éventuellement, dont performanceEntry.entryType
est égal à type
.
performance.getEntriesByType(type)
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.7.0 | Ajouté dans : v16.7.0 |
type
<string>- Retourne : <PerformanceEntry[]>
Retourne une liste d'objets PerformanceEntry
dans l'ordre chronologique par rapport à performanceEntry.startTime
dont performanceEntry.entryType
est égal à type
.
performance.mark(name[, options])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. L'argument name n'est plus optionnel. |
v16.0.0 | Mis à jour pour se conformer à la spécification User Timing Level 3. |
v8.5.0 | Ajouté dans : v8.5.0 |
Crée une nouvelle entrée PerformanceMark
dans la chronologie des performances. Une PerformanceMark
est une sous-classe de PerformanceEntry
dont performanceEntry.entryType
est toujours 'mark'
, et dont performanceEntry.duration
est toujours 0
. Les marques de performance sont utilisées pour marquer des moments significatifs spécifiques dans la chronologie des performances.
L'entrée PerformanceMark
créée est placée dans la chronologie globale des performances et peut être interrogée avec performance.getEntries
, performance.getEntriesByName
et performance.getEntriesByType
. Lorsque l'observation est effectuée, les entrées doivent être effacées manuellement de la chronologie globale des performances avec performance.clearMarks
.
performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, global, cacheMode, bodyInfo, responseStatus[, deliveryType])
[Historique]
Version | Modifications |
---|---|
v22.2.0 | Ajout des arguments bodyInfo, responseStatus et deliveryType. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
timingInfo
<Object> Informations de minutage FetchrequestedUrl
<string> L’URL de la ressourceinitiatorType
<string> Le nom de l’initiateur, par ex. : 'fetch'global
<Object>cacheMode
<string> Le mode de cache doit être une chaîne de caractères vide ('') ou 'local'bodyInfo
<Object> Informations de corps de réponse FetchresponseStatus
<number> Le code d’état de la réponsedeliveryType
<string> Le type de remise. Par défaut:''
.
Cette propriété est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Crée une nouvelle entrée PerformanceResourceTiming
dans la chronologie des ressources. Un PerformanceResourceTiming
est une sous-classe de PerformanceEntry
dont performanceEntry.entryType
est toujours 'resource'
. Les ressources de performance sont utilisées pour marquer des moments dans la chronologie des ressources.
L’entrée PerformanceMark
créée est placée dans la chronologie globale des ressources et peut être interrogée avec performance.getEntries
, performance.getEntriesByName
et performance.getEntriesByType
. Lorsque l’observation est effectuée, les entrées doivent être effacées manuellement de la chronologie globale des performances avec performance.clearResourceTimings
.
performance.measure(name[, startMarkOrOptions[, endMark]])
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.0.0 | Mise à jour pour se conformer à la spécification User Timing Level 3. |
v13.13.0, v12.16.3 | Rendre les paramètres startMark et endMark facultatifs. |
v8.5.0 | Ajoutée dans : v8.5.0 |
name
<string>startMarkOrOptions
<string> | <Object> Facultatif.detail
<any> Détail facultatif supplémentaire à inclure avec la mesure.duration
<number> Durée entre les heures de début et de fin.end
<number> | <string> Horodatage à utiliser comme heure de fin, ou une chaîne identifiant une marque précédemment enregistrée.start
<number> | <string> Horodatage à utiliser comme heure de début, ou une chaîne identifiant une marque précédemment enregistrée.
endMark
<string> Facultatif. Doit être omis sistartMarkOrOptions
est un <Object>.
Crée une nouvelle entrée PerformanceMeasure
dans la chronologie des performances. Un PerformanceMeasure
est une sous-classe de PerformanceEntry
dont performanceEntry.entryType
est toujours 'measure'
, et dont performanceEntry.duration
mesure le nombre de millisecondes écoulées entre startMark
et endMark
.
L'argument startMark
peut identifier n'importe quel PerformanceMark
existant dans la chronologie des performances, ou peut identifier n'importe quelle propriété d'horodatage fournie par la classe PerformanceNodeTiming
. Si le startMark
nommé n'existe pas, une erreur est levée.
L'argument optionnel endMark
doit identifier tout PerformanceMark
existant dans la chronologie des performances ou toute propriété d'horodatage fournie par la classe PerformanceNodeTiming
. endMark
sera performance.now()
si aucun paramètre n'est passé, sinon, si le endMark
nommé n'existe pas, une erreur sera levée.
L'entrée PerformanceMeasure
créée est placée dans la chronologie globale des performances et peut être interrogée avec performance.getEntries
, performance.getEntriesByName
et performance.getEntriesByType
. Lorsque l'observation est effectuée, les entrées doivent être effacées manuellement de la chronologie globale des performances avec performance.clearMeasures
.
performance.nodeTiming
Ajouté dans : v8.5.0
Cette propriété est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Une instance de la classe PerformanceNodeTiming
qui fournit des mesures de performance pour des étapes opérationnelles spécifiques de Node.js.
performance.now()
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l’objet performance comme récepteur. |
v8.5.0 | Ajouté dans : v8.5.0 |
- Retourne : <number>
Retourne l’horodatage actuel en millisecondes haute résolution, où 0 représente le début du processus node
actuel.
performance.setResourceTimingBufferSize(maxSize)
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l’objet performance comme récepteur. |
v18.8.0 | Ajouté dans : v18.8.0 |
Définit la taille du tampon de synchronisation des ressources de performance globale au nombre spécifié d’objets d’entrée de performance de type « ressource ».
Par défaut, la taille maximale du tampon est définie sur 250.
performance.timeOrigin
Ajouté dans : v8.5.0
La propriété timeOrigin
spécifie l’horodatage haute résolution en millisecondes auquel le processus node
actuel a commencé, mesuré en heure Unix.
performance.timerify(fn[, options])
[Historique]
Version | Modifications |
---|---|
v16.0.0 | Ajout de l’option histogramme. |
v16.0.0 | Réimplémenté pour utiliser pure-JavaScript et la possibilité de chronométrer les fonctions asynchrones. |
v8.5.0 | Ajouté dans : v8.5.0 |
fn
<Function>options
<Object>histogram
<RecordableHistogram> Un objet histogramme créé à l’aide deperf_hooks.createHistogram()
qui enregistrera les durées d’exécution en nanosecondes.
Cette propriété est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Encapsule une fonction dans une nouvelle fonction qui mesure le temps d’exécution de la fonction encapsulée. Un PerformanceObserver
doit être abonné au type d’événement 'function'
pour que les détails de la synchronisation soient accessibles.
import { performance, PerformanceObserver } from 'node:perf_hooks'
function someFunction() {
console.log('hello world')
}
const wrapped = performance.timerify(someFunction)
const obs = new PerformanceObserver(list => {
console.log(list.getEntries()[0].duration)
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'] })
// Une entrée de chronologie de performance sera créée
wrapped()
const { performance, PerformanceObserver } = require('node:perf_hooks')
function someFunction() {
console.log('hello world')
}
const wrapped = performance.timerify(someFunction)
const obs = new PerformanceObserver(list => {
console.log(list.getEntries()[0].duration)
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'] })
// Une entrée de chronologie de performance sera créée
wrapped()
Si la fonction encapsulée retourne une promesse, un gestionnaire final sera attaché à la promesse et la durée sera signalée une fois que le gestionnaire final sera invoqué.
performance.toJSON()
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet performance comme récepteur. |
v16.1.0 | Ajouté dans la version : v16.1.0 |
Un objet qui est la représentation JSON de l'objet performance
. Il est similaire à window.performance.toJSON
dans les navigateurs.
Événement : 'resourcetimingbufferfull'
Ajouté dans la version : v18.8.0
L'événement 'resourcetimingbufferfull'
est déclenché lorsque le tampon global de minutage des ressources de performance est plein. Ajustez la taille du tampon de minutage des ressources avec performance.setResourceTimingBufferSize()
ou effacez le tampon avec performance.clearResourceTimings()
dans l'écouteur d'événement pour permettre l'ajout de plus d'entrées dans le tampon de la chronologie des performances.
Classe : PerformanceEntry
Ajouté dans la version : v8.5.0
Le constructeur de cette classe n'est pas directement exposé aux utilisateurs.
performanceEntry.duration
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceEntry comme récepteur. |
v8.5.0 | Ajouté dans la version : v8.5.0 |
Le nombre total de millisecondes écoulées pour cette entrée. Cette valeur n'aura pas de signification pour tous les types d'entrée de performance.
performanceEntry.entryType
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceEntry comme récepteur. |
v8.5.0 | Ajouté dans la version : v8.5.0 |
Le type d'entrée de performance. Il peut s'agir de l'un des éléments suivants :
'dns'
(Node.js uniquement)'function'
(Node.js uniquement)'gc'
(Node.js uniquement)'http2'
(Node.js uniquement)'http'
(Node.js uniquement)'mark'
(disponible sur le Web)'measure'
(disponible sur le Web)'net'
(Node.js uniquement)'node'
(Node.js uniquement)'resource'
(disponible sur le Web)
performanceEntry.name
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceEntry comme receveur. |
v8.5.0 | Ajouté dans : v8.5.0 |
Le nom de l’entrée de performance.
performanceEntry.startTime
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceEntry comme receveur. |
v8.5.0 | Ajouté dans : v8.5.0 |
L’horodatage en millisecondes haute résolution marquant le début de l’entrée de performance.
Classe : PerformanceMark
Ajouté dans : v18.2.0, v16.17.0
- Étend : <PerformanceEntry>
Expose les marques créées via la méthode Performance.mark()
.
performanceMark.detail
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceMark comme receveur. |
v16.0.0 | Ajouté dans : v16.0.0 |
Détail supplémentaire spécifié lors de la création avec la méthode Performance.mark()
.
Classe : PerformanceMeasure
Ajouté dans : v18.2.0, v16.17.0
- Étend : <PerformanceEntry>
Expose les mesures créées via la méthode Performance.measure()
.
Le constructeur de cette classe n’est pas exposé directement aux utilisateurs.
performanceMeasure.detail
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceMeasure comme receveur. |
v16.0.0 | Ajouté dans : v16.0.0 |
Détail supplémentaire spécifié lors de la création avec la méthode Performance.measure()
.
Classe : PerformanceNodeEntry
Ajouté dans : v19.0.0
- Étend : <PerformanceEntry>
Cette classe est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Fournit des données de synchronisation Node.js détaillées.
Le constructeur de cette classe n’est pas directement exposé aux utilisateurs.
performanceNodeEntry.detail
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l’objet PerformanceNodeEntry comme récepteur. |
v16.0.0 | Ajouté dans : v16.0.0 |
Détails supplémentaires spécifiques au entryType
.
performanceNodeEntry.flags
[Historique]
Version | Modifications |
---|---|
v16.0.0 | Obsolète lors de l’exécution. Maintenant déplacé vers la propriété detail lorsque entryType est « gc ». |
v13.9.0, v12.17.0 | Ajouté dans : v13.9.0, v12.17.0 |
[Stable : 0 - Obsolète]
Stable : 0 Stabilité : 0 - Obsolète : Utiliser plutôt performanceNodeEntry.detail
.
Lorsque performanceEntry.entryType
est égal à 'gc'
, la propriété performance.flags
contient des informations supplémentaires sur l’opération de garbage collection. La valeur peut être l’une des suivantes :
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NO
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
performanceNodeEntry.kind
[Historique]
Version | Modifications |
---|---|
v16.0.0 | Obsolète lors de l’exécution. Maintenant déplacé vers la propriété detail lorsque entryType est « gc ». |
v8.5.0 | Ajouté dans : v8.5.0 |
[Stable : 0 - Obsolète]
Stable : 0 Stabilité : 0 - Obsolète : Utiliser plutôt performanceNodeEntry.detail
.
Lorsque performanceEntry.entryType
est égal à 'gc'
, la propriété performance.kind
identifie le type d’opération de garbage collection qui s’est produite. La valeur peut être l’une des suivantes :
perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
Détails du ramasse-miettes ('gc')
Lorsque performanceEntry.type
est égal à 'gc'
, la propriété performanceNodeEntry.detail
sera un <Object> avec deux propriétés :
kind
<number> Un parmi :perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
flags
<number> Un parmi :perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NO
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
Détails HTTP ('http')
Lorsque performanceEntry.type
est égal à 'http'
, la propriété performanceNodeEntry.detail
sera un <Object> contenant des informations supplémentaires.
Si performanceEntry.name
est égal à HttpClient
, le detail
contiendra les propriétés suivantes : req
, res
. Et la propriété req
sera un <Object> contenant method
, url
, headers
, la propriété res
sera un <Object> contenant statusCode
, statusMessage
, headers
.
Si performanceEntry.name
est égal à HttpRequest
, le detail
contiendra les propriétés suivantes : req
, res
. Et la propriété req
sera un <Object> contenant method
, url
, headers
, la propriété res
sera un <Object> contenant statusCode
, statusMessage
, headers
.
Cela pourrait ajouter une surcharge de mémoire supplémentaire et ne devrait être utilisé qu'à des fins de diagnostic, et non pas être activé par défaut en production.
Détails de HTTP/2 ('http2')
Lorsque performanceEntry.type
est égal à 'http2'
, la propriété performanceNodeEntry.detail
sera un <Object> contenant des informations de performance supplémentaires.
Si performanceEntry.name
est égal à Http2Stream
, le detail
contiendra les propriétés suivantes :
bytesRead
<number> Le nombre d’octets de trameDATA
reçus pour ceHttp2Stream
.bytesWritten
<number> Le nombre d’octets de trameDATA
envoyés pour ceHttp2Stream
.id
<number> L’identifiant duHttp2Stream
associétimeToFirstByte
<number> Le nombre de millisecondes écoulées entre lestartTime
dePerformanceEntry
et la réception de la première trameDATA
.timeToFirstByteSent
<number> Le nombre de millisecondes écoulées entre lestartTime
dePerformanceEntry
et l’envoi de la première trameDATA
.timeToFirstHeader
<number> Le nombre de millisecondes écoulées entre lestartTime
dePerformanceEntry
et la réception du premier en-tête.
Si performanceEntry.name
est égal à Http2Session
, le detail
contiendra les propriétés suivantes :
bytesRead
<number> Le nombre d’octets reçus pour cetteHttp2Session
.bytesWritten
<number> Le nombre d’octets envoyés pour cetteHttp2Session
.framesReceived
<number> Le nombre de trames HTTP/2 reçues par laHttp2Session
.framesSent
<number> Le nombre de trames HTTP/2 envoyées par laHttp2Session
.maxConcurrentStreams
<number> Le nombre maximal de flux ouverts simultanément pendant la durée de vie de laHttp2Session
.pingRTT
<number> Le nombre de millisecondes écoulées entre la transmission d’une tramePING
et la réception de son accusé de réception. Présent uniquement si une tramePING
a été envoyée sur laHttp2Session
.streamAverageDuration
<number> La durée moyenne (en millisecondes) pour toutes les instances deHttp2Stream
.streamCount
<number> Le nombre d’instances deHttp2Stream
traitées par laHttp2Session
.type
<string> Soit'server'
soit'client'
pour identifier le type deHttp2Session
.
Timerify ('function') Détails
Lorsque performanceEntry.type
est égal à 'function'
, la propriété performanceNodeEntry.detail
sera un <Array> listant les arguments d'entrée de la fonction chronométrée.
Net ('net') Détails
Lorsque performanceEntry.type
est égal à 'net'
, la propriété performanceNodeEntry.detail
sera un <Object> contenant des informations supplémentaires.
Si performanceEntry.name
est égal à connect
, le detail
contiendra les propriétés suivantes : host
, port
.
DNS ('dns') Détails
Lorsque performanceEntry.type
est égal à 'dns'
, la propriété performanceNodeEntry.detail
sera un <Object> contenant des informations supplémentaires.
Si performanceEntry.name
est égal à lookup
, le detail
contiendra les propriétés suivantes : hostname
, family
, hints
, verbatim
, addresses
.
Si performanceEntry.name
est égal à lookupService
, le detail
contiendra les propriétés suivantes : host
, port
, hostname
, service
.
Si performanceEntry.name
est égal à queryxxx
ou getHostByAddr
, le detail
contiendra les propriétés suivantes : host
, ttl
, result
. La valeur de result
est identique au résultat de queryxxx
ou getHostByAddr
.
Classe : PerformanceNodeTiming
Ajouté dans : v8.5.0
- S'étend : <PerformanceEntry>
Cette propriété est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Fournit des détails de minutage pour Node.js lui-même. Le constructeur de cette classe n'est pas exposé aux utilisateurs.
performanceNodeTiming.bootstrapComplete
Ajouté dans : v8.5.0
L'horodatage haute résolution en millisecondes auquel le processus Node.js a terminé l'amorçage. Si l'amorçage n'est pas encore terminé, la propriété a la valeur -1.
performanceNodeTiming.environment
Ajouté dans : v8.5.0
L’horodatage haute résolution en millisecondes auquel l’environnement Node.js a été initialisé.
performanceNodeTiming.idleTime
Ajouté dans : v14.10.0, v12.19.0
L’horodatage haute résolution en millisecondes de la durée pendant laquelle la boucle d’événements est restée inactive dans le fournisseur d’événements de la boucle d’événements (par ex., epoll_wait
). Cela ne prend pas en compte l’utilisation du CPU. Si la boucle d’événements n’a pas encore démarré (par ex., au premier tick du script principal), la propriété a la valeur 0.
performanceNodeTiming.loopExit
Ajouté dans : v8.5.0
L’horodatage haute résolution en millisecondes auquel la boucle d’événements Node.js s’est terminée. Si la boucle d’événements n’est pas encore terminée, la propriété a la valeur -1. Elle ne peut avoir une valeur différente de -1 que dans un gestionnaire de l’événement 'exit'
.
performanceNodeTiming.loopStart
Ajouté dans : v8.5.0
L’horodatage haute résolution en millisecondes auquel la boucle d’événements Node.js a démarré. Si la boucle d’événements n’a pas encore démarré (par ex., au premier tick du script principal), la propriété a la valeur -1.
performanceNodeTiming.nodeStart
Ajouté dans : v8.5.0
L’horodatage haute résolution en millisecondes auquel le processus Node.js a été initialisé.
performanceNodeTiming.uvMetricsInfo
Ajouté dans : v22.8.0, v20.18.0
- Retourne : <Object>
Il s’agit d’un wrapper de la fonction uv_metrics_info
. Il renvoie l’ensemble actuel de mesures de la boucle d’événements.
Il est recommandé d’utiliser cette propriété dans une fonction dont l’exécution a été planifiée à l’aide de setImmediate
pour éviter de collecter des mesures avant de terminer toutes les opérations planifiées lors de l’itération actuelle de la boucle.
const { performance } = require('node:perf_hooks')
setImmediate(() => {
console.log(performance.nodeTiming.uvMetricsInfo)
})
import { performance } from 'node:perf_hooks'
setImmediate(() => {
console.log(performance.nodeTiming.uvMetricsInfo)
})
performanceNodeTiming.v8Start
Ajouté dans : v8.5.0
L'horodatage en millisecondes haute résolution auquel la plateforme V8 a été initialisée.
Classe : PerformanceResourceTiming
Ajouté dans : v18.2.0, v16.17.0
- Étend : <PerformanceEntry>
Fournit des données de synchronisation réseau détaillées concernant le chargement des ressources d'une application.
Le constructeur de cette classe n'est pas directement exposé aux utilisateurs.
performanceResourceTiming.workerStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution immédiatement avant l'envoi de la requête fetch
. Si la ressource n'est pas interceptée par un worker, la propriété renverra toujours 0.
performanceResourceTiming.redirectStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution qui représente l'heure de début de la récupération qui initie la redirection.
performanceResourceTiming.redirectEnd
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution qui sera créé immédiatement après la réception du dernier octet de la réponse de la dernière redirection.
performanceResourceTiming.fetchStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté en : v18.2.0, v16.17.0 |
Le timestamp en millisecondes haute résolution immédiatement avant que Node.js ne commence à récupérer la ressource.
performanceResourceTiming.domainLookupStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté en : v18.2.0, v16.17.0 |
Le timestamp en millisecondes haute résolution immédiatement avant que Node.js ne commence la recherche de nom de domaine pour la ressource.
performanceResourceTiming.domainLookupEnd
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté en : v18.2.0, v16.17.0 |
Le timestamp en millisecondes haute résolution représentant l’heure immédiatement après que Node.js a terminé la recherche de nom de domaine pour la ressource.
performanceResourceTiming.connectStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté en : v18.2.0, v16.17.0 |
Le timestamp en millisecondes haute résolution représentant l’heure immédiatement avant que Node.js ne commence à établir la connexion au serveur pour récupérer la ressource.
performanceResourceTiming.connectEnd
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution représentant le moment immédiatement après que Node.js a terminé d'établir la connexion au serveur pour récupérer la ressource.
performanceResourceTiming.secureConnectionStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution représentant le moment immédiatement avant que Node.js ne démarre le processus de négociation pour sécuriser la connexion actuelle.
performanceResourceTiming.requestStart
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution représentant le moment immédiatement avant que Node.js ne reçoive le premier octet de la réponse du serveur.
performanceResourceTiming.responseEnd
[Historique]
Version | Modifications |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
L'horodatage en millisecondes haute résolution représentant le moment immédiatement après que Node.js a reçu le dernier octet de la ressource ou immédiatement avant la fermeture de la connexion de transport, selon la première éventualité.
performanceResourceTiming.transferSize
[Historique]
Version | Changements |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
Un nombre représentant la taille (en octets) de la ressource récupérée. La taille inclut les champs d'en-tête de la réponse plus le corps de la charge utile de la réponse.
performanceResourceTiming.encodedBodySize
[Historique]
Version | Changements |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
Un nombre représentant la taille (en octets) reçue de la récupération (HTTP ou cache) du corps de la charge utile, avant de supprimer tout codage de contenu appliqué.
performanceResourceTiming.decodedBodySize
[Historique]
Version | Changements |
---|---|
v19.0.0 | Ce getter de propriété doit être appelé avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
Un nombre représentant la taille (en octets) reçue de la récupération (HTTP ou cache) du corps du message, après avoir supprimé tout codage de contenu appliqué.
performanceResourceTiming.toJSON()
[Historique]
Version | Changements |
---|---|
v19.0.0 | Cette méthode doit être appelée avec l'objet PerformanceResourceTiming comme récepteur. |
v18.2.0, v16.17.0 | Ajouté dans : v18.2.0, v16.17.0 |
Retourne un objet
qui est la représentation JSON de l'objet PerformanceResourceTiming
Classe : PerformanceObserver
Ajouté dans : v8.5.0
PerformanceObserver.supportedEntryTypes
Ajouté dans : v16.0.0
Obtenir les types pris en charge.
new PerformanceObserver(callback)
[Historique]
Version | Modifications |
---|---|
v18.0.0 | Le passage d'un rappel invalide à l'argument callback lève désormais ERR_INVALID_ARG_TYPE au lieu de ERR_INVALID_CALLBACK . |
v8.5.0 | Ajouté dans : v8.5.0 |
callback
<Function>list
<PerformanceObserverEntryList>observer
<PerformanceObserver>
Les objets PerformanceObserver
fournissent des notifications lorsque de nouvelles instances PerformanceEntry
ont été ajoutées à la ligne de temps des performances (Performance Timeline).
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries())
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark'], buffered: true })
performance.mark('test')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries())
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark'], buffered: true })
performance.mark('test')
Étant donné que les instances PerformanceObserver
introduisent leur propre surcharge de performance supplémentaire, les instances ne doivent pas être laissées abonnées aux notifications indéfiniment. Les utilisateurs doivent déconnecter les observateurs dès qu'ils ne sont plus nécessaires.
Le callback
est invoqué lorsqu'un PerformanceObserver
est notifié de nouvelles instances PerformanceEntry
. Le rappel reçoit une instance PerformanceObserverEntryList
et une référence au PerformanceObserver
.
performanceObserver.disconnect()
Ajouté dans : v8.5.0
Déconnecte l'instance PerformanceObserver
de toutes les notifications.
performanceObserver.observe(options)
[Historique]
Version | Changements |
---|---|
v16.7.0 | Mise à jour pour être conforme à Performance Timeline Level 2. L'option buffered a été réajoutée. |
v16.0.0 | Mise à jour pour être conforme à User Timing Level 3. L'option buffered a été supprimée. |
v8.5.0 | Ajoutée dans : v8.5.0 |
options
<Object>type
<string> Un seul type de <PerformanceEntry>. Ne doit pas être spécifié sientryTypes
est déjà spécifié.entryTypes
<string[]> Un tableau de chaînes identifiant les types d'instances <PerformanceEntry> qui intéressent l'observateur. Si non fourni, une erreur sera levée.buffered
<boolean> Si true, le callback de l'observateur est appelé avec une liste des entréesPerformanceEntry
globales mises en mémoire tampon. Si false, seules lesPerformanceEntry
créées après le point temporel sont envoyées au callback de l'observateur. Par défaut :false
.
Abonne l'instance de <PerformanceObserver> aux notifications des nouvelles instances de <PerformanceEntry> identifiées soit par options.entryTypes
soit par options.type
:
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((list, observer) => {
// Appelé une fois de manière asynchrone. `list` contient trois éléments.
})
obs.observe({ type: 'mark' })
for (let n = 0; n < 3; n++) performance.mark(`test${n}`)
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((list, observer) => {
// Appelé une fois de manière asynchrone. `list` contient trois éléments.
})
obs.observe({ type: 'mark' })
for (let n = 0; n < 3; n++) performance.mark(`test${n}`)
performanceObserver.takeRecords()
Ajouté dans : v16.0.0
- Retourne : <PerformanceEntry[]> Liste actuelle des entrées stockées dans l'observateur de performance, en la vidant.
Classe : PerformanceObserverEntryList
Ajouté dans : v8.5.0
La classe PerformanceObserverEntryList
est utilisée pour fournir un accès aux instances PerformanceEntry
transmises à un PerformanceObserver
. Le constructeur de cette classe n'est pas exposé aux utilisateurs.
performanceObserverEntryList.getEntries()
Ajouté dans : v8.5.0
- Retourne : <PerformanceEntry[]>
Retourne une liste d'objets PerformanceEntry
par ordre chronologique en ce qui concerne performanceEntry.startTime
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntries())
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 81.465639,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 81.860064,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntries())
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 81.465639,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 81.860064,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
performanceObserverEntryList.getEntriesByName(name[, type])
Ajouté dans la version : v8.5.0
name
<string>type
<string>- Retourne : <PerformanceEntry[]>
Retourne une liste d’objets PerformanceEntry
dans l’ordre chronologique par rapport à performanceEntry.startTime
dont performanceEntry.name
est égal à name
, et éventuellement, dont performanceEntry.entryType
est égal à type
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByName('meow'))
/**
* [
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 98.545991,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('nope')) // []
console.log(perfObserverList.getEntriesByName('test', 'mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 63.518931,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('test', 'measure')) // []
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark', 'measure'] })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByName('meow'))
/**
* [
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 98.545991,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('nope')) // []
console.log(perfObserverList.getEntriesByName('test', 'mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 63.518931,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('test', 'measure')) // []
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark', 'measure'] })
performance.mark('test')
performance.mark('meow')
performanceObserverEntryList.getEntriesByType(type)
Ajouté dans : v8.5.0
type
<string>- Retourne : <PerformanceEntry[]>
Retourne une liste d'objets PerformanceEntry
par ordre chronologique par rapport à performanceEntry.startTime
dont performanceEntry.entryType
est égal à type
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByType('mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 55.897834,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 56.350146,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByType('mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 55.897834,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 56.350146,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
perf_hooks.createHistogram([options])
Ajouté dans : v15.9.0, v14.18.0
options
<Object>lowest
<number> | <bigint> La valeur discernable la plus basse. Doit être une valeur entière supérieure à 0. Par défaut :1
.highest
<number> | <bigint> La valeur enregistrable la plus élevée. Doit être une valeur entière supérieure ou égale à deux foislowest
. Par défaut :Number.MAX_SAFE_INTEGER
.figures
<number> Le nombre de chiffres de précision. Doit être un nombre compris entre1
et5
. Par défaut :3
.
Retourne : <RecordableHistogram>
Retourne un <RecordableHistogram>.
perf_hooks.monitorEventLoopDelay([options])
Ajouté dans : v11.10.0
options
<Objet>resolution
<number> Le taux d'échantillonnage en millisecondes. Doit être supérieur à zéro. Par défaut :10
.
Retourne : <IntervalHistogram>
Cette propriété est une extension de Node.js. Elle n’est pas disponible dans les navigateurs Web.
Crée un objet IntervalHistogram
qui échantillonne et signale le délai de la boucle d’événements dans le temps. Les délais seront signalés en nanosecondes.
L’utilisation d’un minuteur pour détecter le délai approximatif de la boucle d’événements fonctionne parce que l’exécution des minuteurs est liée spécifiquement au cycle de vie de la boucle d’événements libuv. C’est-à-dire qu’un délai dans la boucle entraînera un délai dans l’exécution du minuteur, et ces délais sont précisément ce que cette API est censée détecter.
import { monitorEventLoopDelay } from 'node:perf_hooks'
const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// Faire quelque chose.
h.disable()
console.log(h.min)
console.log(h.max)
console.log(h.mean)
console.log(h.stddev)
console.log(h.percentiles)
console.log(h.percentile(50))
console.log(h.percentile(99))
const { monitorEventLoopDelay } = require('node:perf_hooks')
const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// Faire quelque chose.
h.disable()
console.log(h.min)
console.log(h.max)
console.log(h.mean)
console.log(h.stddev)
console.log(h.percentiles)
console.log(h.percentile(50))
console.log(h.percentile(99))
Class : Histogram
Ajouté dans : v11.10.0
histogram.count
Ajouté dans : v17.4.0, v16.14.0
Le nombre d’échantillons enregistrés par l’histogramme.
histogram.countBigInt
Ajouté dans : v17.4.0, v16.14.0
Le nombre d’échantillons enregistrés par l’histogramme.
histogram.exceeds
Ajouté dans : v11.10.0
Le nombre de fois où le délai de la boucle d'événements a dépassé le seuil maximal de délai de boucle d'événements d'une heure.
histogram.exceedsBigInt
Ajouté dans : v17.4.0, v16.14.0
Le nombre de fois où le délai de la boucle d'événements a dépassé le seuil maximal de délai de boucle d'événements d'une heure.
histogram.max
Ajouté dans : v11.10.0
Le délai maximal enregistré de la boucle d'événements.
histogram.maxBigInt
Ajouté dans : v17.4.0, v16.14.0
Le délai maximal enregistré de la boucle d'événements.
histogram.mean
Ajouté dans : v11.10.0
La moyenne des délais de boucle d'événements enregistrés.
histogram.min
Ajouté dans : v11.10.0
Le délai minimal enregistré de la boucle d'événements.
histogram.minBigInt
Ajouté dans : v17.4.0, v16.14.0
Le délai minimal enregistré de la boucle d'événements.
histogram.percentile(percentile)
Ajouté dans : v11.10.0
Retourne la valeur au centile donné.
histogram.percentileBigInt(percentile)
Ajouté dans : v17.4.0, v16.14.0
Retourne la valeur au centile donné.
histogram.percentiles
Ajouté dans : v11.10.0
Renvoie un objet Map
détaillant la distribution percentile accumulée.
histogram.percentilesBigInt
Ajouté dans : v17.4.0, v16.14.0
Renvoie un objet Map
détaillant la distribution percentile accumulée.
histogram.reset()
Ajouté dans : v11.10.0
Réinitialise les données d’histogramme collectées.
histogram.stddev
Ajouté dans : v11.10.0
L’écart-type des délais de boucle d’événements enregistrés.
Class : IntervalHistogram extends Histogram
Un Histogram
mis à jour périodiquement à un intervalle donné.
histogram.disable()
Ajouté dans : v11.10.0
- Retourne : <boolean>
Désactive le minuteur d’intervalle de mise à jour. Renvoie true
si le minuteur a été arrêté, false
s’il était déjà arrêté.
histogram.enable()
Ajouté dans : v11.10.0
- Retourne : <boolean>
Active le minuteur d’intervalle de mise à jour. Renvoie true
si le minuteur a été démarré, false
s’il était déjà démarré.
Clonage d’un IntervalHistogram
Les instances <IntervalHistogram> peuvent être clonées via <MessagePort>. Du côté de la réception, l’histogramme est cloné en tant qu’objet <Histogram> simple qui n’implémente pas les méthodes enable()
et disable()
.
Class : RecordableHistogram extends Histogram
Ajouté dans : v15.9.0, v14.18.0
histogram.add(other)
Ajouté dans : v17.4.0, v16.14.0
other
<RecordableHistogram>
Ajoute les valeurs de other
à cet histogramme.
histogram.record(val)
Ajouté dans : v15.9.0, v14.18.0
histogram.recordDelta()
Ajouté dans : v15.9.0, v14.18.0
Calcule la durée (en nanosecondes) écoulée depuis l'appel précédent à recordDelta()
et enregistre cette durée dans l'histogramme.
Exemples
Mesurer la durée des opérations asynchrones
L'exemple suivant utilise les API Hooks asynchrones et Performance pour mesurer la durée réelle d'une opération Timeout (y compris le temps nécessaire à l'exécution du rappel).
import { createHook } from 'node:async_hooks'
import { performance, PerformanceObserver } from 'node:perf_hooks'
const set = new Set()
const hook = createHook({
init(id, type) {
if (type === 'Timeout') {
performance.mark(`Timeout-${id}-Init`)
set.add(id)
}
},
destroy(id) {
if (set.has(id)) {
set.delete(id)
performance.mark(`Timeout-${id}-Destroy`)
performance.measure(`Timeout-${id}`, `Timeout-${id}-Init`, `Timeout-${id}-Destroy`)
}
},
})
hook.enable()
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries()[0])
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['measure'], buffered: true })
setTimeout(() => {}, 1000)
'use strict'
const async_hooks = require('node:async_hooks')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const set = new Set()
const hook = async_hooks.createHook({
init(id, type) {
if (type === 'Timeout') {
performance.mark(`Timeout-${id}-Init`)
set.add(id)
}
},
destroy(id) {
if (set.has(id)) {
set.delete(id)
performance.mark(`Timeout-${id}-Destroy`)
performance.measure(`Timeout-${id}`, `Timeout-${id}-Init`, `Timeout-${id}-Destroy`)
}
},
})
hook.enable()
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries()[0])
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['measure'], buffered: true })
setTimeout(() => {}, 1000)
Mesurer le temps nécessaire pour charger les dépendances
L'exemple suivant mesure la durée des opérations require()
pour charger les dépendances :
import { performance, PerformanceObserver } from 'node:perf_hooks'
// Activer l’observateur
const obs = new PerformanceObserver(list => {
const entries = list.getEntries()
entries.forEach(entry => {
console.log(`import('${entry[0]}')`, entry.duration)
})
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'], buffered: true })
const timedImport = performance.timerify(async module => {
return await import(module)
})
await timedImport('some-module')
'use strict'
const { performance, PerformanceObserver } = require('node:perf_hooks')
const mod = require('node:module')
// Patch de singe de la fonction require
mod.Module.prototype.require = performance.timerify(mod.Module.prototype.require)
require = performance.timerify(require)
// Activer l’observateur
const obs = new PerformanceObserver(list => {
const entries = list.getEntries()
entries.forEach(entry => {
console.log(`require('${entry[0]}')`, entry.duration)
})
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'], buffered: true })
require('some-module')
Mesurer le temps que prend un aller-retour HTTP
L'exemple suivant est utilisé pour suivre le temps passé par le client HTTP (OutgoingMessage
) et la requête HTTP (IncomingMessage
). Pour le client HTTP, cela signifie l'intervalle de temps entre le début de la requête et la réception de la réponse, et pour la requête HTTP, cela signifie l'intervalle de temps entre la réception de la requête et l'envoi de la réponse :
import { PerformanceObserver } from 'node:perf_hooks'
import { createServer, get } from 'node:http'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['http'] })
const PORT = 8080
createServer((req, res) => {
res.end('ok')
}).listen(PORT, () => {
get(`http://127.0.0.1:${PORT}`)
})
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const http = require('node:http')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['http'] })
const PORT = 8080
http
.createServer((req, res) => {
res.end('ok')
})
.listen(PORT, () => {
http.get(`http://127.0.0.1:${PORT}`)
})
Mesurer le temps que prend net.connect
(uniquement pour TCP) lorsque la connexion réussit
import { PerformanceObserver } from 'node:perf_hooks'
import { connect, createServer } from 'node:net'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['net'] })
const PORT = 8080
createServer(socket => {
socket.destroy()
}).listen(PORT, () => {
connect(PORT)
})
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const net = require('node:net')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['net'] })
const PORT = 8080
net
.createServer(socket => {
socket.destroy()
})
.listen(PORT, () => {
net.connect(PORT)
})
Mesurer le temps que prend le DNS lorsque la requête réussit
import { PerformanceObserver } from 'node:perf_hooks'
import { lookup, promises } from 'node:dns'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['dns'] })
lookup('localhost', () => {})
promises.resolve('localhost')
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const dns = require('node:dns')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['dns'] })
dns.lookup('localhost', () => {})
dns.promises.resolve('localhost')