127 votes

Comment obtenir un micro-temps dans Node.js ?

Comment obtenir l'horodatage le plus précis dans Node.js ?

ps Ma version de Node.js est 0.8.X et l'option extension node-microtime ne fonctionne pas pour moi (crash à l'installation)

11voto

jcubic Points 11141

Vous pouvez également utiliser l'API de performance qui fonctionne à la fois dans NodeJS et dans le navigateur :

var start = performance.timing ?
    performance.timing.navigationStart :
    performance.timeOrigin;

var time = (performance.now() + start) * 1000;

L'API de performance stocke la valeur en nombre à virgule flottante et la fraction est en microsecondes.

3voto

krb686 Points 350

Node.js nanotière

J'ai écrit une bibliothèque/objet enveloppante pour node.js au-dessus de l'objet process.hrtime appel de fonction. Il a des fonctions utiles, comme le chronométrage des tâches synchrones et asynchrones, spécifiées en secondes, millisecondes, micro, ou même nano, et suit la syntaxe du timer javascript intégré afin d'être familier.

Les objets minuteurs sont également discrets, de sorte que vous pouvez en avoir autant que vous le souhaitez, chacun ayant son propre objet. setTimeout o setInterval processus en cours.

Cela s'appelle nanotimer . Regardez !

1voto

Ross Points 5397

Pour travailler avec plus de précision que Date.now() mais avec une précision de l'ordre de la milliseconde :

function getTimeMSFloat() {
    var hrtime = process.hrtime();
    return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}

1voto

Pirs Points 358

Je ne suis pas très fier de cette solution, mais vous pouvez avoir horodatage en microseconde ou nanoseconde de cette façon :

const microsecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3,6))
const nanosecond = () => Number(Date.now() + String(process.hrtime()[1]).slice(3))

// usage
microsecond() // return 1586878008997591
nanosecond()  // return 1586878009000645600

// Benchmark with 100 000 iterations
// Date.now: 7.758ms
// microsecond: 33.382ms
// nanosecond: 31.252ms

Sachez-le :

  • Cette solution fonctionne exclusivement avec node.js ,
  • Il s'agit de 3 à 10 fois plus lent que Date.now()
  • Bizarrement, cela semble très précis, hrTime semble suivre exactement les tics du timestamp.
  • Vous pouvez remplacer Date.now() por Number(new Date()) pour obtenir l'horodatage en millisecondes

Editar:

Voici une solution pour avoir la microseconde avec la virgule, cependant, la version du nombre sera arrondie nativement par javascript. Donc si vous voulez le même format à chaque fois, vous devez utiliser la version String.

const microsecondWithCommaString = () => (Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))
const microsecondWithComma = () => Number(Date.now() + '.' + String(process.hrtime()[1]).slice(3,7))

microsecondWithCommaString() // return "1586883629984.8997"
microsecondWithComma() // return 1586883629985.966

0voto

Une réécriture pour aider à une compréhension rapide :

const hrtime = process.hrtime();     // [0] is seconds, [1] is nanoseconds

let nanoSeconds = (hrtime[0] * 1e9) + hrtime[1];    // 1 second is 1e9 nano seconds
console.log('nanoSeconds:  ' + nanoSeconds);
//nanoSeconds:  97760957504895

let microSeconds = parseInt(((hrtime[0] * 1e6) + (hrtime[1]) * 1e-3));
console.log('microSeconds: ' + microSeconds);
//microSeconds: 97760957504

let milliSeconds = parseInt(((hrtime[0] * 1e3) + (hrtime[1]) * 1e-6));
console.log('milliSeconds: ' + milliSeconds);
//milliSeconds: 97760957

Fuente: https://nodejs.org/api/process.html#process_process_hrtime_time

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X