Skip to content

API di misurazione delle performance

[Stabile: 2 - Stabile]

Stabile: 2 Stabilità: 2 - Stabile

Codice sorgente: lib/perf_hooks.js

Questo modulo fornisce un'implementazione di un sottoinsieme delle API Web Performance del W3C, nonché API aggiuntive per le misurazioni delle prestazioni specifiche di Node.js.

Node.js supporta le seguenti API Web Performance:

js
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('Inizio fino ad ora')

performance.mark('A')
doSomeLongRunningProcess(() => {
  performance.measure('Da A ad ora', 'A')

  performance.mark('B')
  performance.measure('Da A a B', 'A', 'B')
})
js
const { PerformanceObserver, performance } = require('node:perf_hooks')

const obs = new PerformanceObserver(items => {
  console.log(items.getEntries()[0].duration)
})
obs.observe({ type: 'measure' })
performance.measure('Inizio fino ad ora')

performance.mark('A')
;(async function doSomeLongRunningProcess() {
  await new Promise(r => setTimeout(r, 5000))
  performance.measure('Da A ad ora', 'A')

  performance.mark('B')
  performance.measure('Da A a B', 'A', 'B')
})()

perf_hooks.performance

Aggiunto in: v8.5.0

Un oggetto che può essere utilizzato per raccogliere metriche sulle performance dall'istanza Node.js corrente. È simile a window.performance nei browser.

performance.clearMarks([name])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Se name non viene fornito, rimuove tutti gli oggetti PerformanceMark dalla Timeline delle Performance. Se viene fornito name, rimuove solo il contrassegno con il nome specificato.

performance.clearMeasures([name])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.7.0Aggiunto in: v16.7.0

Se name non viene fornito, rimuove tutti gli oggetti PerformanceMeasure dalla Timeline delle Performance. Se viene fornito name, rimuove solo la misurazione con il nome specificato.

performance.clearResourceTimings([name])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Se name non viene fornito, rimuove tutti gli oggetti PerformanceResourceTiming dalla Timeline delle Risorse. Se viene fornito name, rimuove solo la risorsa con il nome specificato.

performance.eventLoopUtilization([utilization1[, utilization2]])

Aggiunto in: v14.10.0, v12.19.0

  • utilization1 <Oggetto> Il risultato di una chiamata precedente a eventLoopUtilization().
  • utilization2 <Oggetto> Il risultato di una chiamata precedente a eventLoopUtilization() precedente a utilization1.
  • Restituisce: <Oggetto>

Il metodo eventLoopUtilization() restituisce un oggetto che contiene la durata cumulativa del tempo in cui il ciclo degli eventi è stato sia inattivo che attivo come timer in millisecondi ad alta risoluzione. Il valore di utilization è l'utilizzo calcolato del ciclo degli eventi (ELU).

Se il bootstrapping non è ancora terminato nel thread principale, le proprietà hanno il valore di 0. L'ELU è immediatamente disponibile sui thread Worker poiché il bootstrap avviene all'interno del ciclo degli eventi.

Sia utilization1 che utilization2 sono parametri opzionali.

Se viene passato utilization1, viene calcolato e restituito il delta tra i tempi active e idle della chiamata corrente, nonché il valore utilization corrispondente (simile a process.hrtime()).

Se vengono passati sia utilization1 che utilization2, il delta viene calcolato tra i due argomenti. Questa è un'opzione di convenienza perché, a differenza di process.hrtime(), il calcolo dell'ELU è più complesso di una singola sottrazione.

L'ELU è simile all'utilizzo della CPU, tranne per il fatto che misura solo le statistiche del ciclo degli eventi e non l'utilizzo della CPU. Rappresenta la percentuale di tempo in cui il ciclo degli eventi ha trascorso al di fuori del provider di eventi del ciclo degli eventi (ad es. epoll_wait). Non viene preso in considerazione nessun altro tempo di inattività della CPU. Quello che segue è un esempio di come un processo per lo più inattivo avrà un ELU elevato.

js
import { eventLoopUtilization } from 'node:perf_hooks'
import { spawnSync } from 'node:child_process'

setImmediate(() => {
  const elu = eventLoopUtilization()
  spawnSync('sleep', ['5'])
  console.log(eventLoopUtilization(elu).utilization)
})
js
'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)
})

Sebbene la CPU sia per lo più inattiva durante l'esecuzione di questo script, il valore di utilization è 1. Questo perché la chiamata a child_process.spawnSync() impedisce al ciclo degli eventi di procedere.

Passare un oggetto definito dall'utente anziché il risultato di una chiamata precedente a eventLoopUtilization() porterà a un comportamento indefinito. Non è garantito che i valori restituiti riflettano alcuno stato corretto del ciclo degli eventi.

performance.getEntries()

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.7.0Aggiunto in: v16.7.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime. Se si è interessati solo alle voci di performance di determinati tipi o che hanno determinati nomi, vedere performance.getEntriesByType() e performance.getEntriesByName().

performance.getEntriesByName(name[, type])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.7.0Aggiunto in: v16.7.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime il cui performanceEntry.name è uguale a name e, facoltativamente, il cui performanceEntry.entryType è uguale a type.

performance.getEntriesByType(type)

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.7.0Aggiunto in: v16.7.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime il cui performanceEntry.entryType è uguale a type.

performance.mark(name[, options])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore. L'argomento name non è più opzionale.
v16.0.0Aggiornato per conformarsi alla specifica User Timing Level 3.
v8.5.0Aggiunto in: v8.5.0
  • name <string>
  • options <Object>
    • detail <any> Dettaglio aggiuntivo opzionale da includere con il segno.
    • startTime <number> Un timestamp opzionale da utilizzare come orario del segno. Predefinito: performance.now().

Crea una nuova voce PerformanceMark nella Performance Timeline. Un PerformanceMark è una sottoclasse di PerformanceEntry il cui performanceEntry.entryType è sempre 'mark' e il cui performanceEntry.duration è sempre 0. I segni di performance vengono utilizzati per contrassegnare momenti specifici significativi nella Performance Timeline.

La voce PerformanceMark creata viene inserita nella Performance Timeline globale e può essere interrogata con performance.getEntries, performance.getEntriesByName e performance.getEntriesByType. Quando viene eseguita l'osservazione, le voci devono essere cancellate dalla Performance Timeline globale manualmente con performance.clearMarks.

performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, global, cacheMode, bodyInfo, responseStatus[, deliveryType])

[Cronologia]

VersioneModifiche
v22.2.0Aggiunti gli argomenti bodyInfo, responseStatus e deliveryType.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Questa proprietà è un'estensione di Node.js. Non è disponibile nei browser Web.

Crea una nuova voce PerformanceResourceTiming nella Timeline delle Risorse. PerformanceResourceTiming è una sottoclasse di PerformanceEntry la cui performanceEntry.entryType è sempre 'resource'. Le risorse di performance vengono utilizzate per contrassegnare i momenti nella Timeline delle Risorse.

La voce PerformanceMark creata viene inserita nella Timeline delle Risorse globale e può essere interrogata con performance.getEntries, performance.getEntriesByName e performance.getEntriesByType. Quando l'osservazione viene eseguita, le voci devono essere cancellate dalla Timeline delle Performance globale manualmente con performance.clearResourceTimings.

performance.measure(name[, startMarkOrOptions[, endMark]])

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.0.0Aggiornato per essere conforme alla specifica User Timing Level 3.
v13.13.0, v12.16.3I parametri startMark e endMark sono resi opzionali.
v8.5.0Aggiunto in: v8.5.0
  • name <string>
  • startMarkOrOptions <string> | <Object> Opzionale.
    • detail <any> Dettaglio opzionale aggiuntivo da includere nella misurazione.
    • duration <number> Durata tra l'ora di inizio e quella di fine.
    • end <number> | <string> Timestamp da utilizzare come ora di fine, oppure una stringa che identifica un segno precedentemente registrato.
    • start <number> | <string> Timestamp da utilizzare come ora di inizio, oppure una stringa che identifica un segno precedentemente registrato.
  • endMark <string> Opzionale. Deve essere omesso se startMarkOrOptions è un <Object>.

Crea una nuova voce PerformanceMeasure nella Performance Timeline. Una PerformanceMeasure è una sottoclasse di PerformanceEntry il cui performanceEntry.entryType è sempre 'measure' e la cui performanceEntry.duration misura il numero di millisecondi trascorsi tra startMark e endMark.

L'argomento startMark può identificare qualsiasi PerformanceMark esistente nella Performance Timeline, oppure può identificare qualsiasi delle proprietà timestamp fornite dalla classe PerformanceNodeTiming. Se il startMark specificato non esiste, viene generato un errore.

L'argomento opzionale endMark deve identificare qualsiasi PerformanceMark esistente nella Performance Timeline o qualsiasi delle proprietà timestamp fornite dalla classe PerformanceNodeTiming. Se non viene passato alcun parametro, endMark sarà performance.now(), altrimenti se il endMark specificato non esiste, verrà generato un errore.

La voce PerformanceMeasure creata viene inserita nella Performance Timeline globale e può essere interrogata con performance.getEntries, performance.getEntriesByName e performance.getEntriesByType. Quando viene eseguita l'osservazione, le voci devono essere cancellate manualmente dalla Performance Timeline globale con performance.clearMeasures.

performance.nodeTiming

Aggiunto in: v8.5.0

Questa proprietà è un'estensione di Node.js. Non è disponibile nei browser web.

Un'istanza della classe PerformanceNodeTiming che fornisce metriche di performance per specifiche pietre miliari operative di Node.js.

performance.now()

[Cronologia]

VersioneCambiamenti
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Restituisce l'attuale timestamp in millisecondi ad alta risoluzione, dove 0 rappresenta l'inizio dell'attuale processo node.

performance.setResourceTimingBufferSize(maxSize)

[Cronologia]

VersioneCambiamenti
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v18.8.0Aggiunto in: v18.8.0

Imposta la dimensione globale del buffer di temporizzazione delle risorse di performance al numero specificato di oggetti di inserimento delle performance di tipo "risorsa".

Per impostazione predefinita, la dimensione massima del buffer è impostata a 250.

performance.timeOrigin

Aggiunto in: v8.5.0

Il timeOrigin specifica il timestamp in millisecondi ad alta risoluzione al quale è iniziato l'attuale processo node, misurato in tempo Unix.

performance.timerify(fn[, options])

[Cronologia]

VersioneCambiamenti
v16.0.0Aggiunta l'opzione istogramma.
v16.0.0Re-implementato per utilizzare pure-JavaScript e la capacità di cronometrare le funzioni asincrone.
v8.5.0Aggiunto in: v8.5.0

Questa proprietà è un'estensione di Node.js. Non è disponibile nei browser web.

Avvolge una funzione all'interno di una nuova funzione che misura il tempo di esecuzione della funzione avvolta. Un PerformanceObserver deve essere sottoscritto al tipo di evento 'function' affinché i dettagli di temporizzazione siano accessibili.

js
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'] })

// Verrà creato un inserimento della timeline delle performance
wrapped()
js
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'] })

// Verrà creato un inserimento della timeline delle performance
wrapped()

Se la funzione avvolta restituisce una promessa, verrà allegato un gestore finally alla promessa e la durata verrà segnalata una volta invocato il gestore finally.

performance.toJSON()

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto performance come ricevitore.
v16.1.0Aggiunto in: v16.1.0

Un oggetto che è una rappresentazione JSON dell'oggetto performance. È simile a window.performance.toJSON nei browser.

Evento: 'resourcetimingbufferfull'

Aggiunto in: v18.8.0

L'evento 'resourcetimingbufferfull' viene attivato quando il buffer globale di tempistica delle risorse delle prestazioni è pieno. Regola la dimensione del buffer di tempistica delle risorse con performance.setResourceTimingBufferSize() o cancella il buffer con performance.clearResourceTimings() nel listener dell'evento per consentire l'aggiunta di più voci al buffer della timeline delle prestazioni.

Classe: PerformanceEntry

Aggiunto in: v8.5.0

Il costruttore di questa classe non è esposto direttamente agli utenti.

performanceEntry.duration

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceEntry come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Il numero totale di millisecondi trascorsi per questa voce. Questo valore non sarà significativo per tutti i tipi di Performance Entry.

performanceEntry.entryType

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceEntry come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Il tipo della voce di performance. Può essere uno dei seguenti:

  • 'dns' (solo Node.js)
  • 'function' (solo Node.js)
  • 'gc' (solo Node.js)
  • 'http2' (solo Node.js)
  • 'http' (solo Node.js)
  • 'mark' (disponibile sul Web)
  • 'measure' (disponibile sul Web)
  • 'net' (solo Node.js)
  • 'node' (solo Node.js)
  • 'resource' (disponibile sul Web)

performanceEntry.name

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceEntry come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Il nome della voce di performance.

performanceEntry.startTime

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceEntry come ricevitore.
v8.5.0Aggiunto in: v8.5.0

Il timestamp ad alta risoluzione in millisecondi che indica l'orario di inizio della Voce di Performance.

Classe: PerformanceMark

Aggiunto in: v18.2.0, v16.17.0

Espone i contrassegni creati tramite il metodo Performance.mark().

performanceMark.detail

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceMark come ricevitore.
v16.0.0Aggiunto in: v16.0.0

Dettagli aggiuntivi specificati durante la creazione con il metodo Performance.mark().

Classe: PerformanceMeasure

Aggiunto in: v18.2.0, v16.17.0

Espone le misurazioni create tramite il metodo Performance.measure().

Il costruttore di questa classe non è esposto direttamente agli utenti.

performanceMeasure.detail

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceMeasure come ricevitore.
v16.0.0Aggiunto in: v16.0.0

Dettagli aggiuntivi specificati durante la creazione con il metodo Performance.measure().

Classe: PerformanceNodeEntry

Aggiunto in: v19.0.0

Questa classe è un'estensione di Node.js. Non è disponibile nei browser Web.

Fornisce dati temporali dettagliati di Node.js.

Il costruttore di questa classe non è esposto direttamente agli utenti.

performanceNodeEntry.detail

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceNodeEntry come ricevitore.
v16.0.0Aggiunto in: v16.0.0

Dettagli aggiuntivi specifici per entryType.

performanceNodeEntry.flags

[Cronologia]

VersioneModifiche
v16.0.0Deprecato a runtime. Ora spostato nella proprietà detail quando entryType è 'gc'.
v13.9.0, v12.17.0Aggiunto in: v13.9.0, v12.17.0

[Stabile: 0 - Deprecato]

Stabile: 0 Stabilità: 0 - Deprecato: Utilizzare invece performanceNodeEntry.detail.

Quando performanceEntry.entryType è uguale a 'gc', la proprietà performance.flags contiene informazioni aggiuntive sull'operazione di garbage collection. Il valore può essere uno dei seguenti:

  • 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

[Cronologia]

VersioneModifiche
v16.0.0Deprecato a runtime. Ora spostato nella proprietà detail quando entryType è 'gc'.
v8.5.0Aggiunto in: v8.5.0

[Stabile: 0 - Deprecato]

Stabile: 0 Stabilità: 0 - Deprecato: Utilizzare invece performanceNodeEntry.detail.

Quando performanceEntry.entryType è uguale a 'gc', la proprietà performance.kind identifica il tipo di operazione di garbage collection che si è verificata. Il valore può essere uno dei seguenti:

  • 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

Dettagli sulla Raccolta dei Rifiuti ('gc')

Quando performanceEntry.type è uguale a 'gc', la proprietà performanceNodeEntry.detail sarà un <Oggetto> con due proprietà:

  • kind <numero> Uno tra:

    • 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 <numero> Uno tra:

    • 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

Dettagli HTTP ('http')

Quando performanceEntry.type è uguale a 'http', la proprietà performanceNodeEntry.detail sarà un <Oggetto> contenente informazioni aggiuntive.

Se performanceEntry.name è uguale a HttpClient, il detail conterrà le seguenti proprietà: req, res. E la proprietà req sarà un <Oggetto> contenente method, url, headers, la proprietà res sarà un <Oggetto> contenente statusCode, statusMessage, headers.

Se performanceEntry.name è uguale a HttpRequest, il detail conterrà le seguenti proprietà: req, res. E la proprietà req sarà un <Oggetto> contenente method, url, headers, la proprietà res sarà un <Oggetto> contenente statusCode, statusMessage, headers.

Questo potrebbe aggiungere un sovraccarico di memoria aggiuntivo e dovrebbe essere utilizzato solo per scopi diagnostici, non lasciato attivo in produzione per impostazione predefinita.

Dettagli HTTP/2 ('http2')

Quando performanceEntry.type è uguale a 'http2', la proprietà performanceNodeEntry.detail sarà un <Object> contenente informazioni aggiuntive sulle prestazioni.

Se performanceEntry.name è uguale a Http2Stream, il detail conterrà le seguenti proprietà:

  • bytesRead <number> Il numero di byte del frame DATA ricevuti per questo Http2Stream.
  • bytesWritten <number> Il numero di byte del frame DATA inviati per questo Http2Stream.
  • id <number> L'identificatore dell'oggetto Http2Stream associato.
  • timeToFirstByte <number> Il numero di millisecondi trascorsi tra startTime di PerformanceEntry e la ricezione del primo frame DATA.
  • timeToFirstByteSent <number> Il numero di millisecondi trascorsi tra startTime di PerformanceEntry e l'invio del primo frame DATA.
  • timeToFirstHeader <number> Il numero di millisecondi trascorsi tra startTime di PerformanceEntry e la ricezione del primo header.

Se performanceEntry.name è uguale a Http2Session, il detail conterrà le seguenti proprietà:

  • bytesRead <number> Il numero di byte ricevuti per questa Http2Session.
  • bytesWritten <number> Il numero di byte inviati per questa Http2Session.
  • framesReceived <number> Il numero di frame HTTP/2 ricevuti dalla Http2Session.
  • framesSent <number> Il numero di frame HTTP/2 inviati dalla Http2Session.
  • maxConcurrentStreams <number> Il numero massimo di stream aperti in contemporanea durante la durata della Http2Session.
  • pingRTT <number> Il numero di millisecondi trascorsi tra l'invio di un frame PING e la ricezione del suo acknowledgement. Presente solo se è stato inviato un frame PING sulla Http2Session.
  • streamAverageDuration <number> La durata media (in millisecondi) per tutte le istanze Http2Stream.
  • streamCount <number> Il numero di istanze Http2Stream elaborate dalla Http2Session.
  • type <string> Sia 'server' che 'client' per identificare il tipo di Http2Session.

Dettagli di Timerify ('function')

Quando performanceEntry.type è uguale a 'function', la proprietà performanceNodeEntry.detail sarà un <Array> che elenca gli argomenti di input alla funzione misurata.

Dettagli di Net ('net')

Quando performanceEntry.type è uguale a 'net', la proprietà performanceNodeEntry.detail sarà un <Object> contenente informazioni aggiuntive.

Se performanceEntry.name è uguale a connect, detail conterrà le seguenti proprietà: host, port.

Dettagli di DNS ('dns')

Quando performanceEntry.type è uguale a 'dns', la proprietà performanceNodeEntry.detail sarà un <Object> contenente informazioni aggiuntive.

Se performanceEntry.name è uguale a lookup, detail conterrà le seguenti proprietà: hostname, family, hints, verbatim, addresses.

Se performanceEntry.name è uguale a lookupService, detail conterrà le seguenti proprietà: host, port, hostname, service.

Se performanceEntry.name è uguale a queryxxx o getHostByAddr, detail conterrà le seguenti proprietà: host, ttl, result. Il valore di result è lo stesso del risultato di queryxxx o getHostByAddr.

Classe: PerformanceNodeTiming

Aggiunto in: v8.5.0

Questa proprietà è un'estensione di Node.js. Non è disponibile nei browser Web.

Fornisce dettagli di tempistica per Node.js stesso. Il costruttore di questa classe non è esposto agli utenti.

performanceNodeTiming.bootstrapComplete

Aggiunto in: v8.5.0

Il timestamp in millisecondi ad alta risoluzione in cui il processo Node.js ha completato il bootstrap. Se il bootstrap non è ancora terminato, la proprietà ha il valore -1.

performanceNodeTiming.environment

Aggiunto in: v8.5.0

Timestamp in millisecondi ad alta risoluzione in cui è stato inizializzato l'ambiente Node.js.

performanceNodeTiming.idleTime

Aggiunto in: v14.10.0, v12.19.0

Timestamp in millisecondi ad alta risoluzione della quantità di tempo in cui il loop degli eventi è stato inattivo all'interno del provider di eventi del loop degli eventi (ad esempio, epoll_wait). Questo non tiene conto dell'utilizzo della CPU. Se il loop degli eventi non è ancora stato avviato (ad esempio, nel primo tick dello script principale), la proprietà ha il valore 0.

performanceNodeTiming.loopExit

Aggiunto in: v8.5.0

Timestamp in millisecondi ad alta risoluzione in cui il loop degli eventi Node.js è terminato. Se il loop degli eventi non è ancora terminato, la proprietà ha il valore -1. Può avere un valore diverso da -1 solo in un gestore dell'evento 'exit'.

performanceNodeTiming.loopStart

Aggiunto in: v8.5.0

Timestamp in millisecondi ad alta risoluzione in cui è stato avviato il loop degli eventi Node.js. Se il loop degli eventi non è ancora stato avviato (ad esempio, nel primo tick dello script principale), la proprietà ha il valore -1.

performanceNodeTiming.nodeStart

Aggiunto in: v8.5.0

Timestamp in millisecondi ad alta risoluzione in cui è stato inizializzato il processo Node.js.

performanceNodeTiming.uvMetricsInfo

Aggiunto in: v22.8.0, v20.18.0

  • Restituisce: <Object>
    • loopCount <number> Numero di iterazioni del loop degli eventi.
    • events <number> Numero di eventi elaborati dal gestore eventi.
    • eventsWaiting <number> Numero di eventi in attesa di elaborazione al momento della chiamata del provider di eventi.

Questo è un wrapper per la funzione uv_metrics_info. Restituisce il set corrente di metriche del loop degli eventi.

Si consiglia di utilizzare questa proprietà all'interno di una funzione la cui esecuzione è stata pianificata usando setImmediate per evitare di raccogliere metriche prima di aver completato tutte le operazioni pianificate durante l'iterazione corrente del loop.

js
const { performance } = require('node:perf_hooks')

setImmediate(() => {
  console.log(performance.nodeTiming.uvMetricsInfo)
})
js
import { performance } from 'node:perf_hooks'

setImmediate(() => {
  console.log(performance.nodeTiming.uvMetricsInfo)
})

performanceNodeTiming.v8Start

Aggiunto in: v8.5.0

Timestamp in millisecondi ad alta risoluzione in cui è stata inizializzata la piattaforma V8.

Classe: PerformanceResourceTiming

Aggiunto in: v18.2.0, v16.17.0

Fornisce dati temporali di rete dettagliati riguardanti il caricamento delle risorse di un'applicazione.

Il costruttore di questa classe non è direttamente esposto agli utenti.

performanceResourceTiming.workerStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione immediatamente prima della spedizione della richiesta fetch. Se la risorsa non viene intercettata da un worker, la proprietà restituirà sempre 0.

performanceResourceTiming.redirectStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta l'ora di inizio del fetch che avvia il reindirizzamento.

performanceResourceTiming.redirectEnd

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che verrà creato immediatamente dopo aver ricevuto l'ultimo byte della risposta dell'ultimo reindirizzamento.

performanceResourceTiming.fetchStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione immediatamente prima che Node.js inizi a recuperare la risorsa.

performanceResourceTiming.domainLookupStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione immediatamente prima che Node.js inizi la ricerca del nome di dominio per la risorsa.

performanceResourceTiming.domainLookupEnd

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente dopo che Node.js ha completato la ricerca del nome di dominio per la risorsa.

performanceResourceTiming.connectStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente prima che Node.js inizi a stabilire la connessione con il server per recuperare la risorsa.

performanceResourceTiming.connectEnd

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente dopo che Node.js ha completato l'instaurazione della connessione con il server per recuperare la risorsa.

performanceResourceTiming.secureConnectionStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente prima che Node.js inizi il processo di handshake per proteggere la connessione corrente.

performanceResourceTiming.requestStart

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente prima che Node.js riceva il primo byte della risposta dal server.

performanceResourceTiming.responseEnd

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Timestamp in millisecondi ad alta risoluzione che rappresenta il tempo immediatamente dopo che Node.js riceve l'ultimo byte della risorsa o immediatamente prima che la connessione di trasporto venga chiusa, a seconda di quale evento si verifica per primo.

performanceResourceTiming.transferSize

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Un numero che rappresenta la dimensione (in ottetti) della risorsa recuperata. La dimensione include i campi dell'intestazione di risposta più il corpo del payload di risposta.

performanceResourceTiming.encodedBodySize

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Un numero che rappresenta la dimensione (in ottetti) ricevuta dal recupero (HTTP o cache), del corpo del payload, prima di rimuovere qualsiasi codifica del contenuto applicata.

performanceResourceTiming.decodedBodySize

[Cronologia]

VersioneModifiche
v19.0.0Questo getter di proprietà deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Un numero che rappresenta la dimensione (in ottetti) ricevuta dal recupero (HTTP o cache), del corpo del messaggio, dopo aver rimosso qualsiasi codifica del contenuto applicata.

performanceResourceTiming.toJSON()

[Cronologia]

VersioneModifiche
v19.0.0Questo metodo deve essere chiamato con l'oggetto PerformanceResourceTiming come ricevente.
v18.2.0, v16.17.0Aggiunto in: v18.2.0, v16.17.0

Restituisce un oggetto che è la rappresentazione JSON dell'oggetto PerformanceResourceTiming

Classe: PerformanceObserver

Aggiunto in: v8.5.0

PerformanceObserver.supportedEntryTypes

Aggiunto in: v16.0.0

Ottieni i tipi supportati.

new PerformanceObserver(callback)

[Cronologia]

VersioneModifiche
v18.0.0Il passaggio di un callback non valido all'argomento callback ora genera ERR_INVALID_ARG_TYPE invece di ERR_INVALID_CALLBACK.
v8.5.0Aggiunto in: v8.5.0

Gli oggetti PerformanceObserver forniscono notifiche quando nuove istanze PerformanceEntry sono state aggiunte alla Timeline delle Performance.

js
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')
js
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')

Poiché le istanze PerformanceObserver introducono un ulteriore sovraccarico di prestazioni, le istanze non devono rimanere sottoscritte alle notifiche indefinitamente. Gli utenti dovrebbero disconnettere gli osservatori non appena non sono più necessari.

Il callback viene invocato quando un PerformanceObserver viene notificato di nuove istanze PerformanceEntry. Il callback riceve un'istanza PerformanceObserverEntryList e un riferimento a PerformanceObserver.

performanceObserver.disconnect()

Aggiunto in: v8.5.0

Disconnette l'istanza PerformanceObserver da tutte le notifiche.

performanceObserver.observe(options)

[Cronologia]

VersioneModifiche
v16.7.0Aggiornato per conformarsi a Performance Timeline Level 2. L'opzione buffered è stata aggiunta.
v16.0.0Aggiornato per conformarsi a User Timing Level 3. L'opzione buffered è stata rimossa.
v8.5.0Aggiunto in: v8.5.0
  • options <Oggetto>
    • type <stringa> Un singolo tipo <PerformanceEntry>. Non deve essere specificato se entryTypes è già specificato.
    • entryTypes <stringa[]> Una matrice di stringhe che identificano i tipi di istanze <PerformanceEntry> a cui l'osservatore è interessato. Se non fornito, verrà generato un errore.
    • buffered <booleano> Se vero, la callback dell'osservatore viene chiamata con un elenco di voci PerformanceEntry memorizzate nella cache a livello globale. Se falso, solo le voci PerformanceEntry create dopo il punto temporale vengono inviate alla callback dell'osservatore. Predefinito: false.

Iscrive l'istanza <PerformanceObserver> alle notifiche di nuove istanze <PerformanceEntry> identificate da options.entryTypes o options.type:

js
import { performance, PerformanceObserver } from 'node:perf_hooks'

const obs = new PerformanceObserver((list, observer) => {
  // Chiamato una volta in modo asincrono. `list` contiene tre elementi.
})
obs.observe({ type: 'mark' })

for (let n = 0; n < 3; n++) performance.mark(`test${n}`)
js
const { performance, PerformanceObserver } = require('node:perf_hooks')

const obs = new PerformanceObserver((list, observer) => {
  // Chiamato una volta in modo asincrono. `list` contiene tre elementi.
})
obs.observe({ type: 'mark' })

for (let n = 0; n < 3; n++) performance.mark(`test${n}`)

performanceObserver.takeRecords()

Aggiunto in: v16.0.0

  • Restituisce: <PerformanceEntry[]> Elenco corrente delle voci memorizzate nell'osservatore delle prestazioni, svuotandolo.

Classe: PerformanceObserverEntryList

Aggiunto in: v8.5.0

La classe PerformanceObserverEntryList viene utilizzata per fornire accesso alle istanze PerformanceEntry passate a un PerformanceObserver. Il costruttore di questa classe non è esposto agli utenti.

performanceObserverEntryList.getEntries()

Aggiunto in: v8.5.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime.

js
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')
js
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])

Aggiunto in: v8.5.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime il cui performanceEntry.name è uguale a name, e facoltativamente, il cui performanceEntry.entryType è uguale a type.

js
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')
js
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)

Aggiunto in: v8.5.0

Restituisce un elenco di oggetti PerformanceEntry in ordine cronologico rispetto a performanceEntry.startTime il cui performanceEntry.entryType è uguale a type.

js
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')
js
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])

Aggiunto in: v15.9.0, v14.18.0

  • options <Object>

    • lowest <number> | <bigint> Il valore più basso distinguibile. Deve essere un valore intero maggiore di 0. Predefinito: 1.
    • highest <number> | <bigint> Il valore più alto registrato. Deve essere un valore intero uguale o maggiore di due volte lowest. Predefinito: Number.MAX_SAFE_INTEGER.
    • figures <number> Il numero di cifre di precisione. Deve essere un numero compreso tra 1 e 5. Predefinito: 3.
  • Restituisce: <RecordableHistogram>

Restituisce un <RecordableHistogram>.

perf_hooks.monitorEventLoopDelay([options])

Aggiunto in: v11.10.0

Questa proprietà è un'estensione di Node.js. Non è disponibile nei browser Web.

Crea un oggetto IntervalHistogram che campionata e riporta il ritardo del loop degli eventi nel tempo. I ritardi saranno riportati in nanosecondi.

L'utilizzo di un timer per rilevare il ritardo approssimativo del loop degli eventi funziona perché l'esecuzione dei timer è legata specificamente al ciclo di vita del loop degli eventi libuv. Cioè, un ritardo nel loop causerà un ritardo nell'esecuzione del timer, e questi ritardi sono specificatamente ciò che questa API intende rilevare.

js
import { monitorEventLoopDelay } from 'node:perf_hooks'

const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// Fai qualcosa.
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))
js
const { monitorEventLoopDelay } = require('node:perf_hooks')
const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// Fai qualcosa.
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

Aggiunto in: v11.10.0

histogram.count

Aggiunto in: v17.4.0, v16.14.0

Il numero di campioni registrati dall'istogramma.

histogram.countBigInt

Aggiunto in: v17.4.0, v16.14.0

Il numero di campioni registrati dall'istogramma.

histogram.exceeds

Aggiunto in: v11.10.0

Il numero di volte in cui il ritardo del loop degli eventi ha superato la soglia massima di ritardo del loop degli eventi di 1 ora.

histogram.exceedsBigInt

Aggiunto in: v17.4.0, v16.14.0

Il numero di volte in cui il ritardo del loop degli eventi ha superato la soglia massima di ritardo del loop degli eventi di 1 ora.

histogram.max

Aggiunto in: v11.10.0

Il ritardo massimo del loop degli eventi registrato.

histogram.maxBigInt

Aggiunto in: v17.4.0, v16.14.0

Il ritardo massimo del loop degli eventi registrato.

histogram.mean

Aggiunto in: v11.10.0

La media dei ritardi del loop degli eventi registrati.

histogram.min

Aggiunto in: v11.10.0

Il ritardo minimo del loop degli eventi registrato.

histogram.minBigInt

Aggiunto in: v17.4.0, v16.14.0

Il ritardo minimo del loop degli eventi registrato.

histogram.percentile(percentile)

Aggiunto in: v11.10.0

  • percentile <number> Un valore percentuale nell'intervallo (0, 100].
  • Restituisce: <number>

Restituisce il valore alla percentuale specificata.

histogram.percentileBigInt(percentile)

Aggiunto in: v17.4.0, v16.14.0

  • percentile <number> Un valore percentuale nell'intervallo (0, 100].
  • Restituisce: <bigint>

Restituisce il valore alla percentuale specificata.

histogram.percentiles

Aggiunto in: v11.10.0

Restituisce un oggetto Map che dettaglia la distribuzione delle percentuali accumulate.

histogram.percentilesBigInt

Aggiunto in: v17.4.0, v16.14.0

Restituisce un oggetto Map che dettaglia la distribuzione delle percentuali accumulate.

histogram.reset()

Aggiunto in: v11.10.0

Reimposta i dati dell'istogramma raccolti.

histogram.stddev

Aggiunto in: v11.10.0

La deviazione standard dei ritardi del loop degli eventi registrati.

Classe: IntervalHistogram extends Histogram

Un Histogram che viene aggiornato periodicamente a un dato intervallo.

histogram.disable()

Aggiunto in: v11.10.0

Disabilita il timer dell'intervallo di aggiornamento. Restituisce true se il timer è stato arrestato, false se era già arrestato.

histogram.enable()

Aggiunto in: v11.10.0

Abilita il timer dell'intervallo di aggiornamento. Restituisce true se il timer è stato avviato, false se era già avviato.

Clonazione di un IntervalHistogram

Le istanze di <IntervalHistogram> possono essere clonate tramite <MessagePort>. Sul lato ricevente, l'istogramma viene clonato come un semplice oggetto <Histogram> che non implementa i metodi enable() e disable().

Classe: RecordableHistogram extends Histogram

Aggiunto in: v15.9.0, v14.18.0

histogram.add(other)

Aggiunto in: v17.4.0, v16.14.0

Aggiunge i valori da other a questo istogramma.

histogram.record(val)

Aggiunto in: v15.9.0, v14.18.0

histogram.recordDelta()

Aggiunto in: v15.9.0, v14.18.0

Calcola la quantità di tempo (in nanosecondi) trascorso dalla chiamata precedente a recordDelta() e registra tale quantità nell'istogramma.

Esempi

Misurazione della durata delle operazioni asincrone

L'esempio seguente utilizza le Async Hooks e le API Performance per misurare la durata effettiva di un'operazione Timeout (inclusa la quantità di tempo impiegata per eseguire la callback).

js
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)
js
'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)

Misurare il tempo di caricamento delle dipendenze

L'esempio seguente misura la durata delle operazioni require() per caricare le dipendenze:

js
import { performance, PerformanceObserver } from 'node:perf_hooks'

// Attiva l'osservatore
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')
js
'use strict'
const { performance, PerformanceObserver } = require('node:perf_hooks')
const mod = require('node:module')

// Monkey patch della funzione require
mod.Module.prototype.require = performance.timerify(mod.Module.prototype.require)
require = performance.timerify(require)

// Attiva l'osservatore
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')

Misurare il tempo di un round-trip HTTP

L'esempio seguente viene utilizzato per tracciare il tempo impiegato dal client HTTP (OutgoingMessage) e dalla richiesta HTTP (IncomingMessage). Per il client HTTP, significa l'intervallo di tempo tra l'inizio della richiesta e la ricezione della risposta, e per la richiesta HTTP, significa l'intervallo di tempo tra la ricezione della richiesta e l'invio della risposta:

js
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}`)
})
js
'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}`)
  })

Misurare il tempo impiegato da net.connect (solo per TCP) quando la connessione ha successo

js
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)
})
js
'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)
  })

Misurare il tempo impiegato dal DNS quando la richiesta ha successo

js
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')
js
'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')