Mam kawałek kodu JavaScript, który wykonuję za pomocą node.js
interpretera.
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");
}
});
}
Jak mogę zmierzyć czas potrzebny na operacje wstawiania bazy danych? Mógłbym obliczyć różnicę wartości dat przed i przed tym fragmentem kodu, ale byłoby to niepoprawne z powodu asynchronicznej natury kodu.
javascript
node.js
profiling
Stormshadow
źródło
źródło
timerlog
który jest podobny,console.time()
ale z dodatkowymi funkcjami; github.com/brillout/timerlogOdpowiedzi:
Użyj Node.js
console.time()
iconsole.timeEnd()
:źródło
Jest do tego zaprojektowana metoda. Sprawdź process.hrtime (); .
Zasadniczo umieszczam to na górze mojej aplikacji.
Następnie używam go, aby zobaczyć, jak długo zajmują funkcje. Oto podstawowy przykład, który drukuje zawartość pliku tekstowego o nazwie „output.txt”:
Oto szybki test, który można uruchomić w terminalu (powłoka BASH):
źródło
process.hrtime(start)
dwa razy? Czy ma to jakiś szczególny powód?Wywołanie
console.time('label')
spowoduje zapisanie aktualnego czasu w milisekundach, a później wywołanieconsole.timeEnd('label')
wyświetli czas od tego momentu.Czas w milisekundach zostanie automatycznie wydrukowany obok etykiety, więc nie musisz wykonywać osobnego połączenia z plikiem console.log, aby wydrukować etykietę:
Aby uzyskać więcej informacji, zobacz dokumentację programistów Mozilli na
console.time
.źródło
Zaskoczony, nikt jeszcze nie wspomniał o nowych wbudowanych bibliotekach:
Dostępne w Węzle> = 8,5 i powinny być w Modern Browers
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Węzeł 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Węzeł 10.x
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
źródło
TypeError: performance.getEntriesByName is not a function
w węźle 10.4.1Stability: 1 - Experimental
może? :) nodejs.org/docs/latest-v8.x/api/…Dla każdego, kto chce uzyskać upływ czasu zamiast wyniku konsoli:
użyj process.hrtime () jako sugestii @ D.Deriso, poniżej jest moje prostsze podejście:
źródło
źródło
var start = process.hrtime(); ... var end = process.hrtime(start);
aby uzyskać wysoką rozdzielczość (jeśli muszę spodziewać się dokładności poniżej milisekundy)Stare pytanie, ale dla prostego API i lekkiego rozwiązania; możesz użyć perfy, który korzysta wewnętrznie z wysokiej rozdzielczości w czasie rzeczywistym (
process.hrtime
).Zauważ, że przy każdym
perfy.end(label)
wywołaniu instancja ta jest automatycznie niszczona.Ujawnienie: Napisałem ten moduł, zainspirowany odpowiedzią D.Deriso . Dokumenty tutaj .
źródło
Możesz spróbować Benchmark.js . Obsługuje wiele platform, w tym także node.js.
źródło
Możesz także wypróbować exectimer . Daje ci informacje zwrotne takie jak:
[edytuj] Istnieje jeszcze prostszy sposób korzystania z exectimer, ponieważ teraz może on zawijać kod do pomiaru. Twój kod może być zawinięty w następujący sposób:
źródło
Miałem ten sam problem podczas przenoszenia z AWS na Azure
W przypadku ekspresów i aws możesz już użyć istniejącego time () i timeEnd ()
W przypadku platformy Azure użyj tego: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Te time () i timeEnd () używają istniejącej funkcji hrtime (), która daje czas rzeczywisty wysokiej rozdzielczości.
Mam nadzieję że to pomoże.
źródło
Inną opcją jest użycie narzędzia do debugowania ekspresowego :
Dogodnie oferuje panel profilujący:
Również. aby dodać do powyższych odpowiedzi, możesz sprawdzić tę odpowiedź, aby włączyć dowolny kod profilujący tylko dla środowiska programistycznego.
źródło