Wie kann ich den genauesten Zeitstempel in Node.js erhalten?
ps Meine Version von Node.js ist 0.8.X und die Node-Microtime-Erweiterung funktioniert bei mir nicht (Absturz bei der Installation)
javascript
node.js
v8
NiLL
quelle
quelle
Date.now()
Bitte.process.hrtime()
process.hrtime()
gibt die aktuelle Zeit nicht zurück.In Node.js wird "Zeit mit hoher Auflösung" über zur Verfügung gestellt
process.hrtime
. Es gibt ein Array mit dem ersten Element in Sekunden und dem zweiten Element in den verbleibenden Nanosekunden zurück.Gehen Sie wie folgt vor, um die aktuelle Zeit in Mikrosekunden abzurufen:
(Vielen Dank an itaifrenkel für den Hinweis auf einen Fehler bei der obigen Konvertierung.)
In modernen Browsern steht Zeit mit Mikrosekundengenauigkeit als zur Verfügung
performance.now
. Dokumentation finden Sie unter https://developer.mozilla.org/en-US/docs/Web/API/Performance/now .Ich habe eine Implementierung dieser Funktion für Node.js basierend auf erstellt
process.hrtime
, die relativ schwierig zu verwenden ist, wenn Sie nur die Zeitdifferenz zwischen zwei Punkten in einem Programm berechnen möchten. Siehe http://npmjs.org/package/performance-now . Gemäß der Spezifikation gibt diese Funktion die Zeit in Millisekunden an, ist jedoch ein Float mit einer Genauigkeit von weniger als einer Millisekunde.In Version 2.0 dieses Moduls beziehen sich die angegebenen Millisekunden auf den Zeitpunkt, zu dem der Knotenprozess gestartet wurde (
Date.now() - (process.uptime() * 1000)
). Sie müssen dies zum Ergebnis hinzufügen, wenn Sie einen ähnlichen Zeitstempel möchtenDate.now()
. Beachten Sie auch, dass Sie eine Neuberechnung durchführen solltenDate.now() - (process.uptime() * 1000)
. BeideDate.now
undprocess.uptime
sind für präzise Messungen sehr unzuverlässig.Um die aktuelle Zeit in Mikrosekunden abzurufen, können Sie so etwas verwenden.
Siehe auch: Bietet JavaScript einen hochauflösenden Timer?
quelle
process.hrtime()
, um einen Unterschied zu erhalten. zBvar startTime = process.hrtime();
und dannvar diff = process.hrtime(startTime);
.require("performance.now")
seinrequire("performance-now")
?process.hrtime()
gibt die aktuelle Zeit nicht zurück.Bekannt
now
ist das:quelle
process.hrtime()
gibt die aktuelle Zeit nicht zurück.Der
BigInt
Datentyp wird seit Node.js 10.7.0 unterstützt. ( Siehe auch die Ankündigung des Blogposts ). Für diese unterstützten Versionen von Node.js wird dieprocess.hrtime([time])
Methode jetzt als "Legacy" betrachtet und durch dieprocess.hrtime.bigint()
Methode ersetzt.tl; dr
process.hrtime.bigint()
process.hrtime()
quelle
Es gibt auch https://github.com/wadey/node-microtime :
quelle
Node.js Nanotimer
Ich habe eine Wrapper-Bibliothek / ein Wrapper-Objekt für node.js über den
process.hrtime
Funktionsaufruf geschrieben. Es verfügt über nützliche Funktionen wie das Timing von synchronen und asynchronen Aufgaben, die in Sekunden, Millisekunden, Mikro oder sogar Nano angegeben sind, und folgt der Syntax des integrierten Javascript-Timers, um vertraut zu sein.Timer-Objekte sind ebenfalls diskret, sodass Sie so viele Objekte haben können, wie Sie möchten, jedes mit einem eigenen
setTimeout
oder einemsetInterval
laufenden Prozess.Es heißt Nanotimer . Hör zu!
quelle
So arbeiten Sie präziser als
Date.now()
, aber mit Millisekunden in Float-Präzision:quelle
Erhalten Sie
hrtime
als einzelne Zahl in einer Zeile:Array.reduce
Wenn ein einzelnes Argument angegeben wird, wird das erste Element des Arrays als Anfangswertaccumulator
verwendet. Man könnte0
als Anfangswert verwenden und dies würde auch funktionieren, aber warum das Extra tun* 0
.quelle
Es gibt npm-Pakete, die an die Systemfunktion gettimeofday () gebunden sind, die unter Linux einen Zeitstempel mit einer Genauigkeit von Mikrosekunden zurückgibt. Suche nach npm
gettimeofday
. Das Aufrufen von C ist schneller alsprocess.hrtime()
quelle
Ein Umschreiben zum schnellen Verständnis:
Quelle: https://nodejs.org/api/process.html#process_process_hrtime_time
quelle
Ich bin nicht so stolz auf diese Lösung, aber Sie können den Zeitstempel in Mikrosekunden oder Nanosekunden folgendermaßen anzeigen :
Wisse das:
Date.now()
Date.now()
durchNumber(new Date())
in Millisekunden erhalten ZeitstempelBearbeiten:
Hier eine Lösung, um Mikrosekunden mit Komma zu haben, jedoch wird die Zahlenversion nativ durch Javascript gerundet. Wenn Sie also jedes Mal dasselbe Format möchten, sollten Sie die String-Version verwenden.
quelle
process.hrtime () gibt keinen aktuellen ts an.
Das sollte funktionieren.
quelle
besser?
quelle