2014-04-11 9 views
35

Penso che la domanda sia semplice.window.performance.now() equivalente in nodejs?

Sto cercando qualcosa di simile a window.performance.now() nel motore V8 nodejs.

In questo momento sto usando solo: -

var now = Date.now(); 
//do some processing.. 
console.log("time elapsed:", Date.now() - now); 

Ma, ho letto che window.performance.now() è molto più preciso rispetto utilizzando la data a causa del ciò che è definito here.

risposta

32

Vorrei solo ricordare che tre dei motivi che l'autore attribuisce alla preferenza dell'API di temporizzazione nel browser non sembrano applicarsi direttamente a una situazione di nodo e la quarta, l'inaccuratezza del tempo di Javscript, cita un articolo del 2008, e vorrei fortemente evitare di fare affidamento su materiale più vecchio per quanto riguarda le specifiche delle prestazioni di Javascript, in particolare dato il recente round di miglioramenti delle prestazioni che tutti i motori hanno fatto per supportare le app "HTML5".

Tuttavia, in risposta alla tua domanda, si dovrebbe guardare a process.hrtime()

UPDATE: Il pacchetto present (disponibile tramite npm install present) fornisce po 'di zucchero intorno hrtime se ti piacerebbe.

+0

Sì, è proprio quello di cui ho bisogno. Grazie. Daremo un'occhiata anche a "presente". – shriek

+0

C'è anche il nome appropriato https://www.npmjs.com/package/performance-now –

+0

Quale autore? Per favore includi il contesto nella tua risposta. –

15

Che dire?

console.time('FooTimer'); 
// do the work 
console.timeEnd('FooTimer'); 
+1

Attenzione console.time() se stai usando promesse, attendi, ecc. La coppia time()/timeEnd() sembra funzionare con lo stato globale - se hai tempo lo stesso tag in parallelo, le cose non funzioneranno correttamente. – Shorn

24

Ecco una scorciatoia per process.hrtime() che restituisce millisecondi invece di microsecondi:

function clock(start) { 
    if (!start) return process.hrtime(); 
    var end = process.hrtime(start); 
    return Math.round((end[0]*1000) + (end[1]/1000000)); 
} 

utilizzo:

var start = clock(); 
// do some processing that takes time 
var duration = clock(start); 
console.log("Took "+duration+"ms"); 

emetterà qualcosa come "Took 200ms"

3

Ecco un tipografico versione con process.hrtime(), basata su NextLocal's risposta:

class Benchmark { 

    private start = process.hrtime(); 

    public elapsed(): number { 
     const end = process.hrtime(this.start); 
     return Math.round((end[0] * 1000) + (end[1]/1000000)); 
    } 
} 

export = Benchmark; 

utilizzati:

import Benchmark = require("./benchmark"); 

const benchmark = new Benchmark(); 

console.log(benchmark.elapsed());