2013-07-19 5 views
5

Ich habe eine Node.js App gemacht, die genau das Gleiche macht, dass eine andere Lösung in C#. Die beiden app erhalten alle Javascript-Dateien aus einem Verzeichnis rekursiv und führen uglify-js Befehl minify die Dateien.Was ist der bessere Weg, um die Gesamtzeit der Node.js App zu erreichen?

Mein Projekt hat etwa 150 JavaScript-Dateien minify und der C# Ansatz dauert ca. 22s all die Dinge zu tun (mit Fäden).

Nach dem Lesen von Node.js Dokumentation und Bücher, habe ich beschlossen, die Node.js Weg zu tun. Ich habe schon gemacht, aber ich kann die Gesamtzeit Berichterstattung Node.js tut das Zeug, weil sein asynchronen Ansatz nicht tun ...

(ja, ich weiß, ich benutze Fäden in C#, die asynchron zu waren)

Also, was ist der bessere Weg, um die gesamte Zeit Node.js App Ausführung zu bekommen?

Ich verwende Node.js v0.10.13 als win32 Umgebung.

+1

Ihre gesamte Ausführungszeit ist jedoch lang genug, um alles zu erledigen. Etwas Asynchrones zu tun bedeutet nicht, dass es schneller geht. Oder führen Sie Teilprozesse aus? Node.js führt kein Threading durch (für Ihre JS), also was genau möchten Sie messen? – Brad

+0

Ja @Brad. Ich führe Teilprozesse aus und möchte die Gesamtzeitausführung von allen kennen, wenn die node.js-Anwendung zum Befehl zurückkehrt ... – tetri

+0

Sie könnten einfach die Zeit messen, die der Prozess lief, es sei denn, Sie suchen nach CPU-Zeit? – Brad

Antwort

4

Bereits zu Beginn des Skripts, verwenden console.time('Some_Name_Here');, und dann console.timeEnd('Some_Name_Here'); verwenden, wo immer das Skript seine Ausführung beendet.

Es ist eine schnelle, native Funktionalität von Node.js und verhindert, dass Sie ein neues Date-Objekt initialisieren müssen.

Hier ist eine kurze Dokumentation über die console.time() Methode: http://nodejs.org/api/stdio.html#stdio_console_time_label.

+0

Danke @Bagavatu, aber meine App hat verschiedene asynchrone Funktionen mit 'child_process' und ich weiß nicht, wo ich' console.timeEnd' nennen soll. Gibt es dafür ein globales Endereignis? – tetri

+1

Ich fand [process Event: 'exit'] (http://nodejs.org/api/all.html#all_event_exit) und 'console.time()' funktioniert auch! – tetri

3

Sie könnten die Zeit Start/Ende Timing-Methode tun.

Am Anfang Ihres Hauptskriptes greifen Sie die Zeit.

var start = Date.now(); 

process.on("exit", function() { 
    var end = Date.now(); 
    console.log("Time taken: %ds", (end - start)/1000); 
}); 

// all you code... 
// more code... 
+1

Bitte verwenden Sie 'process.hrtime()' anstelle von 'Datum' – cr0

+0

Richtig .. Das Konzept bleibt gleich, aber cr0 ist richtig, es ist genauer in dieser Fall. Siehe http://nodejs.org/api/process.html#process_process_hrtime –

+0

Sie könnten auch process.uptime() verwenden, aber ich kann nicht mit seiner Genauigkeit sprechen. –