Ich habe einen Teil des JavaScript-Codes, den ich mit dem node.js
Interpreter ausführe .
for(var i = 1; i < LIMIT; i++) {
var user = {
id: i,
name: "MongoUser [" + i + "]"
};
db.users.save(user, function(err, saved) {
if(err || !saved) {
console.log("Error");
} else {
console.log("Saved");
}
});
}
Wie kann ich die Zeit messen, die diese Datenbankeinfügevorgänge benötigen? Ich könnte die Differenz der Datumswerte nach und vor diesem Code berechnen, aber das wäre aufgrund der asynchronen Natur des Codes falsch.
javascript
node.js
profiling
Sturmschatten
quelle
quelle
timerlog
was ähnlich ist,console.time()
aber mit zusätzlichen Funktionen; github.com/brillout/timerlogAntworten:
Verwenden Sie die Node.js
console.time()
undconsole.timeEnd()
:quelle
Dafür gibt es eine Methode. Check out process.hrtime (); .
Also habe ich dies im Grunde ganz oben in meiner App platziert.
Dann benutze ich es, um zu sehen, wie lange Funktionen dauern. Hier ist ein einfaches Beispiel, das den Inhalt einer Textdatei mit dem Namen "output.txt" druckt:
Hier ist ein kurzer Test, den Sie in einem Terminal (BASH-Shell) ausführen können:
quelle
process.hrtime(start)
zweimal an? Gibt es einen bestimmten Grund dafür?Beim Aufrufen
console.time('label')
wird die aktuelle Zeit in Millisekunden aufgezeichnet. Bei einem späteren Aufrufconsole.timeEnd('label')
wird die Dauer ab diesem Zeitpunkt angezeigt.Die Zeit in Millisekunden wird automatisch neben dem Etikett gedruckt, sodass Sie console.log nicht separat aufrufen müssen, um ein Etikett zu drucken:
Weitere Informationen finden Sie in den Entwicklerdokumenten von Mozilla
console.time
.quelle
Überrascht hatte noch niemand die neu eingebauten Bibliotheken erwähnt:
Verfügbar in Node> = 8.5 und sollte in Modern Browers sein
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Knoten 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Knoten 10.x.
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
quelle
TypeError: performance.getEntriesByName is not a function
in Node v10.4.1Stability: 1 - Experimental
könnte sein? :) nodejs.org/docs/latest-v8.x/api/…Für alle, die anstelle der Konsolenausgabe einen Wert für die verstrichene Zeit erhalten möchten:
Verwenden Sie process.hrtime () als @ D.Deriso-Vorschlag. Unten ist mein einfacherer Ansatz:
quelle
quelle
var start = process.hrtime(); ... var end = process.hrtime(start);
, um eine hohe Auflösungszeit zu erhalten (wenn ich eine Genauigkeit von weniger als einer Millisekunde erwarten muss)Alte Frage, aber für eine einfache API und eine leichte Lösung; Sie können perfy verwenden, das
process.hrtime
intern hochauflösende Echtzeit ( ) verwendet.Beachten Sie
perfy.end(label)
, dass diese Instanz bei jedem Aufruf automatisch zerstört wird.Offenlegung: Schrieb dieses Modul, inspiriert von D.Derisos Antwort . Docs hier .
quelle
Sie könnten Benchmark.js ausprobieren. Es unterstützt viele Plattformen, darunter auch node.js.
quelle
Sie können auch Exectimer ausprobieren . Es gibt Ihnen Feedback wie:
[Bearbeiten] Es gibt jetzt noch eine einfachere Möglichkeit, Exectimer zu verwenden, da jetzt der zu messende Code umbrochen werden kann. Ihr Code könnte folgendermaßen verpackt werden:
quelle
Ich hatte das gleiche Problem beim Wechsel von AWS zu Azure
Für Express & Aws können Sie bereits vorhandene time () und timeEnd () verwenden.
Verwenden Sie für Azure Folgendes: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Diese time () und timeEnd () verwenden die vorhandene hrtime () -Funktion, die eine hochauflösende Echtzeit liefert.
Hoffe das hilft.
quelle
Eine weitere Option ist die Verwendung des Express-Debug- Tools:
Es bietet bequem ein Profiling-Panel:
Ebenfalls. Um die obigen Antworten zu ergänzen, können Sie diese Antwort überprüfen , um Profiling-Code nur für die Entwicklungsumgebung zu aktivieren.
quelle