¿Cómo puedo obtener la marca de tiempo más precisa en Node.js?
ps Mi versión de Node.js es 0.8.X y la extensión node-microtime no me funciona (falla en la instalación)
javascript
node.js
v8
NiLL
fuente
fuente
Date.now()
Por favor.process.hrtime()
process.hrtime()
no devuelve la hora actual.En Node.js, el "tiempo de alta resolución" está disponible a través de
process.hrtime
. Devuelve una matriz con el primer elemento el tiempo en segundos y el segundo elemento los nanosegundos restantes.Para obtener la hora actual en microsegundos, haga lo siguiente:
(Gracias a itaifrenkel por señalar un error en la conversión anterior).
En los navegadores modernos, el tiempo con precisión de microsegundos está disponible como
performance.now
. Consulte https://developer.mozilla.org/en-US/docs/Web/API/Performance/now para obtener documentación.Hice una implementación de esta función para Node.js, basada en
process.hrtime
, que es relativamente difícil de usar si solo desea calcular la diferencia de tiempo entre dos puntos en un programa. Consulte http://npmjs.org/package/performance-now . Según la especificación, esta función informa el tiempo en milisegundos, pero es un flotador con una precisión de menos de milisegundos.En la versión 2.0 de este módulo, los milisegundos informados son relativos a cuando se inició el proceso del nodo (
Date.now() - (process.uptime() * 1000)
). Debe agregar eso al resultado si desea una marca de tiempo similar aDate.now()
. También tenga en cuenta que debería volver a calcularDate.now() - (process.uptime() * 1000)
. AmbosDate.now
yprocess.uptime
son muy poco fiables para realizar mediciones precisas.Para obtener la hora actual en microsegundos, puede usar algo como esto.
Consulte también: ¿JavaScript proporciona un temporizador de alta resolución?
fuente
process.hrtime()
para obtener una diferencia. por ejemplovar startTime = process.hrtime();
y luegovar diff = process.hrtime(startTime);
.require("performance.now")
serrequire("performance-now")
?process.hrtime()
no devuelve la hora actual.Conocido que
now
es:fuente
process.hrtime()
no devuelve la hora actual.los
BigInt
tipo de datos es compatible desde Node.js 10.7.0. ( ver también el anuncio de la publicación del blog ). Para estas versiones compatibles de Node.js, elprocess.hrtime([time])
método ahora se considera 'heredado', reemplazado por elprocess.hrtime.bigint()
método.tl; dr
process.hrtime.bigint()
process.hrtime()
fuente
También hay https://github.com/wadey/node-microtime :
fuente
Nanotimer de Node.js
Escribí una biblioteca / objeto contenedor para node.js en la parte superior del
process.hrtime
llamada a función. Tiene funciones útiles, como sincronizar tareas sincrónicas y asincrónicas, especificadas en segundos, milisegundos, micro o incluso nano, y sigue la sintaxis del temporizador javascript integrado para resultar familiar.Los objetos de temporizador también son discretos, por lo que puede tener tantos como desee, cada uno con su propio proceso
setTimeout
o ensetInterval
ejecución.Se llama nanotimer . ¡Echale un vistazo!
fuente
Para trabajar con más precisión que
Date.now()
, pero con milisegundos en precisión flotante:fuente
Obtenga un
hrtime
solo número en una línea:Array.reduce
, cuando se le da un solo argumento, usará el primer elemento de la matriz comoaccumulator
valor inicial . Se podría usar0
como valor inicial y esto también funcionaría, pero ¿por qué hacer el extra* 0
?fuente
hay paquetes npm que se vinculan a la función gettimeofday () del sistema, que devuelve una marca de tiempo de precisión de microsegundos en Linux. Busque npm
gettimeofday
. Llamar a C es más rápido queprocess.hrtime()
fuente
Una reescritura para ayudar a una comprensión rápida:
Fuente: https://nodejs.org/api/process.html#process_process_hrtime_time
fuente
No estoy tan orgulloso de esta solución, pero puede tener una marca de tiempo en microsegundos o nanosegundos de esta manera:
Saber que:
Date.now()
Date.now()
porNumber(new Date())
para obtener la marca de tiempo en milisegundosEditar:
Aquí una solución para tener microsegundos con coma, sin embargo, la versión del número será redondeada de forma nativa por javascript. Entonces, si desea el mismo formato cada vez, debe usar la versión String.
fuente
process.hrtime () no da ts actuales.
Esto debería funcionar.
fuente
¿mejor?
fuente