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)
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)
Dans Node.js, le "temps haute résolution" est rendu disponible par l'intermédiaire de process.hrtime
. Elle renvoie un tableau dont le premier élément est le temps en secondes, et le second élément les nanosecondes restantes.
Pour obtenir l'heure actuelle en microsecondes, procédez comme suit :
var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
(Merci à itaifrenkel pour avoir signalé une erreur dans la conversion ci-dessus).
Dans les navigateurs modernes, le temps avec une précision de l'ordre de la microseconde est disponible en tant que performance.now
. Voir https://developer.mozilla.org/en-US/docs/Web/API/Performance/now pour la documentation.
J'ai réalisé une implémentation de cette fonction pour Node.js, basée sur process.hrtime
qui est relativement difficile à utiliser si vous souhaitez uniquement calculer le différentiel de temps entre deux points dans un programme. Voir http://npmjs.org/package/performance-now . Selon la spécification, cette fonction rapporte le temps en millisecondes, mais c'est un flottant avec une précision inférieure à la milliseconde.
Dans la version 2.0 de ce module, les millisecondes rapportées sont relatives au moment où le processus du noeud a été lancé ( Date.now() - (process.uptime() * 1000)
). Vous devez ajouter cela au résultat si vous voulez un horodatage similaire à Date.now()
. Notez également que vous ne devez pas recalculer Date.now() - (process.uptime() * 1000)
. Les deux sites Date.now
y process.uptime
sont très peu fiables pour des mesures précises.
Pour obtenir l'heure actuelle en microsecondes, vous pouvez utiliser quelque chose comme ceci.
var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)
Voir aussi : JavaScript fournit-il une minuterie haute résolution ?
new Date().getTime()
? Cela vous donne un horodatage en millisecondes, qui est le plus précis que JS puisse vous donner.
Mise à jour : Comme indiqué par vaughan, process.hrtime()
est disponible au sein de Node.js - sa résolution est de l'ordre de la nanoseconde et donc sa valeur est beaucoup plus élevée. Cette fonction renvoie un tableau [seconds, nanoseconds]
contenant la valeur haute résolution actuelle en temps réel, mais notez que c'est non lié à une horloge spécifique ce qui signifie que le différence dans deux valeurs successives vous indique le temps écoulé, mais les valeurs individuelles ne vous disent rien de significatif.
Notez également qu'à partir de Node v10, process.hrtime()
a été marqué "legacy" et vous devriez utiliser process.hrtime.bigint()
à la place, ce qui donne un seul nombre BigInt plutôt qu'un tableau.
now('milli'); // 120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; // 120335360904333
Sachant que now
est :
const now = (unit) => {
const hrTime = process.hrtime();
switch (unit) {
case 'milli':
return hrTime[0] * 1000 + hrTime[1] / 1000000;
case 'micro':
return hrTime[0] * 1000000 + hrTime[1] / 1000;
case 'nano':
default:
return hrTime[0] * 1000000000 + hrTime[1];
}
};
El BigInt
est pris en charge depuis Node.js 10.7.0. ( voir aussi le annonce d'un article de blog ). Pour ces versions prises en charge de Node.js, l'option process.hrtime([time])
est désormais considérée comme un "héritage" et a été remplacée par la méthode du process.hrtime.bigint()
méthode.
El
bigint
version de lprocess.hrtime()
méthode renvoyant le temps réel actuel à haute résolution dans unebigint
.
const start = process.hrtime.bigint();
// 191051479007711n
setTimeout(() => {
const end = process.hrtime.bigint();
// 191052633396993n
console.log(`Benchmark took ${end - start} nanoseconds`);
// Benchmark took 1154389282 nanoseconds
}, 1000);
en résumé
process.hrtime.bigint()
process.hrtime()
Il y a aussi https://github.com/wadey/node-microtime :
> var microtime = require('microtime')
> microtime.now()
1297448895297028
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.