Jak uzyskać mikrotime w węźle.js?
Jak mogę uzyskać najdokładniejszy znacznik czasu w Node.js?
Ps moja wersja Node.js wynosi 0,8.X i rozszerzenie node-microtime nie działa dla mnie (crash przy instalacji)
9 answers
new Date().getTime()
? Daje to znacznik czasu w milisekundach, który jest najdokładniejszy, jaki da ci JS.
Update: jak stwierdził vaughan, process.hrtime()
jest dostępny w Node.js-jego rozdzielczoĹ "Ä ‡ to nanosekundy, a wiÄ ™ c znacznie wyĺźsza, nie oznacza to rĂłwnieĹź, Ĺźe musi byÄ ‡ dokĹ' adniejsza.
PS.: Dla jasności, process.hrtime()
zwraca krotkę Array
zawierającą aktualny czas rzeczywisty w wysokiej rozdzielczości w [sekundy, nanosekundy]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 18:16:27
In Node.js, "czas wysokiej rozdzielczości" jest udostępniany poprzez process.hrtime
. Zwraca tablicę z pierwszym elementem czas w sekundach, a drugim elementem Pozostałe nanosekundy.
Aby uzyskać bieżący czas w mikrosekundach, wykonaj następujące czynności:
var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
(podziękowania dla itaifrenkel za wskazanie błędu w konwersji powyżej.)
W nowoczesnych przeglądarkach czas z mikrosekundową precyzją jest dostępny jako performance.now
. Zobacz też https://developer.mozilla.org/en-US/docs/Web/API/Performance/now do dokumentacji.
Wykonałem implementację tej funkcji dla Node.js, oparty na process.hrtime
, który jest stosunkowo trudny w użyciu, jeśli chcesz obliczyć różnicę czasu między dwoma punktami w programie. Zobacz http://npmjs.org/package/performance-now . Zgodnie ze specyfikacją ta funkcja raportuje czas w milisekundach, ale jest to zmiennoprzecinkowa z dokładnością poniżej milisekundy.
W wersji 2.0 z ten moduł, raportowane milisekundy są względne do momentu rozpoczęcia procesu węzła (Date.now() - (process.uptime() * 1000)
). Musisz dodać to do wyniku, jeśli chcesz znacznik czasu podobny do Date.now()
. Należy również pamiętać, że należy przeliczać Date.now() - (process.uptime() * 1000)
. Zarówno Date.now
, jak i process.uptime
są wysoce zawodne do precyzyjnych pomiarów.
Aby uzyskać bieżący czas w mikrosekundach, możesz użyć czegoś takiego.
var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)
Zobacz także: czy JavaScript zapewnia timer o wysokiej rozdzielczości?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35
now('milli'); // 120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; // 120335360904333
Wiadomo, że now
jest:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 09:00:07
Jest też 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 16:40:27
Węzeł.js nanotimer
Napisałem bibliotekę/obiekt wrappera dla node.js na szczycie wywołania funkcji process.hrtime
. Ma przydatne funkcje, takie jak synchroniczne i asynchroniczne zadania synchroniczne, określone w sekundach, milisekundach, mikro, a nawet nano, i postępuje zgodnie ze składnią wbudowanego timera javascript, aby być znanym.
Obiekty timera są również dyskretne, więc możesz mieć tyle, ile chcesz, każdy z własnym procesem setTimeout
lub setInterval
.
Nazywa się nanotimer . Zobacz!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 19:23:53
Do pracy z większą precyzją niż Date.now()
, ale z milisekundami w precyzji float:
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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 15:08:52
Istnieją pakiety npm, które wiążą się z funkcją gettimeofday() systemu,
który zwraca mikrosekundowy znacznik czasu precyzji w Linuksie. Szukaj
npm gettimeofday
. Wywołanie C jest szybsze niż process.hrtime()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 23:22:26
Przepisanie, aby pomóc w szybkim zrozumieniu:
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
Źródło: 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 04:56:31
Lepiej?
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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 16:34:52