Cómo obtener un microtiempo en el nodo.js?
¿Cómo puedo obtener la marca de tiempo más precisa en el nodo.js?
Ps Mi versión de Node.js es 0.8.X y el nodo-microtime extensión no funciona para mí (accidente en la instalación)
9 answers
new Date().getTime()
? Esto le da una marca de tiempo en milisegundos, que es la más precisa que JS le dará.
Actualización: Como indica vaughan, process.hrtime()
está disponible dentro del nodo.js - su resolución son nanosegundos y por lo tanto su mucho más alto, también esto no significa que tiene que ser más exacto.
PS.: Para ser más claro, process.hrtime()
te devuelve una tupla Array
que contiene el tiempo real de alta resolución actual en [segundos, nanosegundos]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-28 18:16:27
En el nodo.js, "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:
var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
(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
. Ver https://developer.mozilla.org/en-US/docs/Web/API/Performance/now para la documentación.
He hecho una implementación de esta función para Node.js, basado en process.hrtime
, que es relativamente difícil de usar si solo desea calcular el diferencial de tiempo entre dos puntos en un programa. Véase 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 sub-milisegundos.
En la versión 2.0 de este módulo, los milisegundos reportados son relativos a cuando se inició el proceso de nodo (Date.now() - (process.uptime() * 1000)
). Necesita agregar eso al resultado si desea una marca de tiempo similar a Date.now()
. También tenga en cuenta que debe volver a calcular Date.now() - (process.uptime() * 1000)
. Tanto Date.now
como process.uptime
son altamente poco fiables para mediciones precisas.
Para obtener la hora actual en microsegundos, puede usar algo como esto.
var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)
Véase también: ¿Proporciona JavaScript un temporizador de alta resolución?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:35
now('milli'); // 120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; // 120335360904333
Conocido que now
es:
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':
return hrTime[0] * 1000000000 + hrTime[1];
default:
return hrTime[0] * 1000000000 + hrTime[1];
}
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-28 09:00:07
También Hay https://github.com/wadey/node-microtime:
> var microtime = require('microtime')
> microtime.now()
1297448895297028
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 16:40:27
Nodo.js nanotimer
Escribí una librería/objeto wrapper para node.js encima de la llamada a la función process.hrtime
. Tiene funciones útiles, como la sincronización de tareas síncronas y asíncronas, especificadas en segundos, milisegundos, micro o incluso nano, y sigue la sintaxis del temporizador javascript incorporado para ser 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 setInterval
en ejecución.
Se llama nanotimero . ¡Mira esto!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-12 19:23:53
Para trabajar con más precisión que Date.now()
, pero con milisegundos en la precisión del flotador:
function getTimeMSFloat() {
var hrtime = process.hrtime();
return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-08 15:08:52
Hay paquetes npm que enlazan a la función gettimeofday() del sistema,
que devuelve una marca de tiempo de precisión de microsegundos en Linux. Buscar por
npm gettimeofday
. Llamar a C es más rápido que process.hrtime()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 23:22:26
Una reescritura para ayudar a la comprensión rápida:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-28 04:56:31
Mejor?
Number(process.hrtime().join(''))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-27 16:34:52