2013-07-19 22 views
5

Zrobiłem aplikację Node.js, która tworzy dokładnie to samo, co inne rozwiązanie w C#. Obie aplikacje pobierają wszystkie pliki javascript z katalogu rekursywnie i wykonują komendę uglify-js do minify plików.Jaki jest lepszy sposób uzyskania całkowitego czasu wykonania aplikacji Node.js?

Mój projekt ma około 150 plików JavaScript do Minify i podejście C# trwa około 22s robić wszystkie rzeczy (używając wątki).

Po przeczytaniu dokumentacji i książek Node.js, zdecydowałem się na sposób Node.js. Ja już to zrobił, ale nie mogę zrobić raportowania całkowity czas Node.js robić rzeczy, ponieważ jego podejście asynchronicznego ...

(tak, wiem, używam wątki w C# który został asynchroniczny zbyt)

Jaki jest lepszy sposób uzyskania całkowitego czasu wykonania aplikacji Node.js?

Używam środowiska Node.js v0.10.13 jako win32.

+1

Twój całkowity czas wykonania jest jednak długi, aby to wszystko zrobić. Robienie czegoś asynchronicznego nie oznacza, że ​​robi się to szybciej. Czy też korzystasz z podprocesów? Node.js nie robi wątków (dla twojego JS), więc co konkretnie chcesz zmierzyć? – Brad

+0

Tak @Brad. Używam podprocesów i chcę poznać całkowity czas ich wykonania, gdy aplikacja node.js wróci do polecenia ... – tetri

+0

Można po prostu zmierzyć czas uruchomienia procesu, chyba że szukasz czasu procesora? – Brad

Odpowiedz

4

Na samym początku skryptu, użyj console.time('Some_Name_Here');, a następnie użyj console.timeEnd('Some_Name_Here'); gdziekolwiek skrypt zakończy swoje działanie.

Jest to szybka, natywna funkcja Node.js i uniemożliwia zainicjowanie nowego obiektu Date.

Oto krótka dokumentacja dotycząca metody console.time(): http://nodejs.org/api/stdio.html#stdio_console_time_label.

+0

Dziękuję @Bagavatu, ale moja aplikacja ma różne asynchroniczne funkcje z 'child_process' i nie wiem gdzie nazywać' console.timeEnd'. Czy istnieje globalne wydarzenie końcowe? – tetri

+1

Znalazłem [process Event: 'exit'] (http://nodejs.org/api/all.html#all_event_exit) i 'console.time()' działa również! – tetri

3

Można wykonać metodę czasu rozpoczęcia/zakończenia.

Na początku głównego skryptu chwytasz czas.

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

użyj 'process.hrtime()' zamiast 'Date' – cr0

+0

Right .. pojęcie pozostaje takie samo, ale cr0 ma rację, jest bardziej dokładne w ta sprawa. Zobacz http://nodejs.org/api/process.html#process_process_hrtime –

+0

Możesz także użyć process.uptime(), ale nie mogę mówić do jego dokładności. –

Powiązane problemy