Jak uzyskać najdokładniejszy znacznik czasu w Node.js?
ps Moja wersja Node.js to 0.8.X, a rozszerzenie node-microtime nie działa dla mnie (awaria podczas instalacji)
javascript
node.js
v8
NiLL
źródło
źródło
Date.now()
Proszę.process.hrtime()
process.hrtime()
nie zwraca aktualnego czasu.W Node.js „czas wysokiej rozdzielczości” jest udostępniany za pośrednictwem
process.hrtime
. Zwraca tablicę z pierwszym elementem czas w sekundach, a drugim elementem pozostałe nanosekundy.Aby uzyskać aktualny czas w mikrosekundach, wykonaj następujące czynności:
(Podziękowania dla itaifrenkel za wskazanie błędu w powyższej konwersji).
W nowoczesnych przeglądarkach czas z dokładnością do mikrosekund jest dostępny w formacie
performance.now
. Zobacz https://developer.mozilla.org/en-US/docs/Web/API/Performance/now, aby uzyskać dokumentację.Zrobiłem implementację tej funkcji dla Node.js, opartą na
process.hrtime
, która jest stosunkowo trudna w użyciu, jeśli chcesz tylko obliczyć różnicę czasu między dwoma punktami w programie. Zobacz http://npmjs.org/package/performance-now . Zgodnie ze specyfikacją ta funkcja podaje czas w milisekundach, ale jest to liczba zmiennoprzecinkowa z dokładnością do milisekund.W wersji 2.0 tego modułu raportowane milisekundy odnoszą się do czasu uruchomienia procesu węzła (
Date.now() - (process.uptime() * 1000)
). Musisz dodać to do wyniku, jeśli chcesz mieć znacznik czasu podobny doDate.now()
. Pamiętaj również, że powinieneś ponownie obliczyćDate.now() - (process.uptime() * 1000)
. ObaDate.now
iprocess.uptime
są wysoce zawodne przy precyzyjnych pomiarach.Aby uzyskać aktualny czas w mikrosekundach, możesz użyć czegoś takiego.
Zobacz też: Czy JavaScript zapewnia zegar o wysokiej rozdzielczości?
źródło
process.hrtime()
aby uzyskać różnicę. np.var startTime = process.hrtime();
a potemvar diff = process.hrtime(startTime);
.require("performance.now")
byćrequire("performance-now")
?process.hrtime()
nie zwraca aktualnego czasu.Wiadomo, że
now
:źródło
process.hrtime()
nie zwraca aktualnego czasu.Typ
BigInt
danych jest obsługiwany od wersji Node.js 10.7.0. ( zobacz także ogłoszenie na blogu ). W przypadku tych obsługiwanych wersji Node.jsprocess.hrtime([time])
metoda jest teraz traktowana jako „starsza” i zastąpiona przezprocess.hrtime.bigint()
metodę.tl; dr
process.hrtime.bigint()
process.hrtime()
źródło
Jest też https://github.com/wadey/node-microtime :
źródło
Nanotimer Node.js.
Napisałem bibliotekę / obiekt opakowujący dla node.js w górnej części
process.hrtime
wywołania funkcji. Ma przydatne funkcje, takie jak synchroniczne i asynchroniczne zadania czasowe, określone w sekundach, milisekundach, mikro, a nawet nano, i podąża za składnią wbudowanego timera javascript, aby był znajomy.Obiekty timera są również dyskretne, więc możesz mieć dowolną liczbę obiektów, każdy z własnym
setTimeout
lubsetInterval
działającym procesem.Nazywa się nanotimer . Sprawdź to!
źródło
Aby pracować z większą precyzją niż
Date.now()
, ale z milisekundami z precyzją zmiennoprzecinkową:źródło
Uzyskaj
hrtime
jako pojedynczy numer w jednej linii:Array.reduce
, gdy zostanie podany pojedynczy argument, użyje pierwszego elementu tablicy jakoaccumulator
wartości początkowej . Można by użyć0
jako wartości początkowej i to też by działało, ale po co robić dodatkowe* 0
.źródło
istnieją pakiety npm, które wiążą się z funkcją systemową gettimeofday (), która w systemie Linux zwraca znacznik czasu z dokładnością do mikrosekundy. Szukaj npm
gettimeofday
. Wywołanie C jest szybsze niżprocess.hrtime()
źródło
Przepisanie ułatwiające szybkie zrozumienie:
Źródło: https://nodejs.org/api/process.html#process_process_hrtime_time
źródło
Nie jestem zbyt dumny z tego rozwiązania, ale możesz mieć znacznik czasu w mikrosekundach lub nanosekundach w ten sposób:
Wiedz, że:
Date.now()
Date.now()
na,Number(new Date())
aby uzyskać sygnaturę czasową w milisekundachEdytować:
Tutaj rozwiązanie, aby mieć mikrosekundę z przecinkiem, jednak wersja liczbowa zostanie natywnie zaokrąglona przez javascript. Więc jeśli chcesz mieć ten sam format za każdym razem, powinieneś użyć jego wersji String.
źródło
process.hrtime () nie podaje aktualnego ts.
To powinno działać.
źródło
lepszy?
źródło