Eu tenho um pedaço de código JavaScript que estou executando usando o node.js
intérprete.
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");
}
});
}
Como posso medir o tempo gasto por essas operações de inserção de banco de dados? Eu poderia calcular a diferença dos valores de data antes e antes desse trecho de código, mas isso seria incorreto devido à natureza assíncrona do código.
javascript
node.js
profiling
Stormshadow
fonte
fonte
timerlog
que é semelhante,console.time()
mas com recursos adicionais; github.com/brillout/timerlogRespostas:
Use o Node.js
console.time()
econsole.timeEnd()
:fonte
Existe um método projetado para isso. Confira process.hrtime (); .
Então, eu basicamente coloquei isso no topo do meu aplicativo.
Então eu uso para ver quanto tempo as funções levam. Aqui está um exemplo básico que imprime o conteúdo de um arquivo de texto chamado "output.txt":
Aqui está um teste rápido que você pode executar em um terminal (shell BASH):
fonte
process.hrtime(start)
duas vezes? Existe uma razão específica para isso?A chamada
console.time('label')
registrará a hora atual em milissegundos e, posteriormente, a chamadaconsole.timeEnd('label')
exibirá a duração a partir desse ponto.O tempo em milissegundos será impresso automaticamente ao lado da etiqueta, para que você não precise fazer uma chamada separada para console.log para imprimir uma etiqueta:
Para mais informações, consulte os documentos para desenvolvedores da Mozilla em
console.time
.fonte
Surpreendido, ninguém mencionou ainda as novas bibliotecas construídas:
Disponível em Nó> = 8.5 e deve estar em Modern Browers
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Nó 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Nó 10.x
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
fonte
TypeError: performance.getEntriesByName is not a function
no nó v10.4.1Stability: 1 - Experimental
talvez? :) nodejs.org/docs/latest-v8.x/api/…Para quem deseja obter o valor decorrido no tempo em vez da saída do console:
use process.hrtime () como sugestão @ D.Deriso, abaixo está minha abordagem mais simples:
fonte
fonte
var start = process.hrtime(); ... var end = process.hrtime(start);
para obter tempo de alta resolução (se eu precisar esperar uma precisão abaixo de milissegundos)Pergunta antiga, mas para uma API simples e uma solução leve; você pode usar o perfy, que usa tempo real de alta resolução (
process.hrtime
) internamente.Observe que cada vez que
perfy.end(label)
é chamada, essa instância é destruída automaticamente.Divulgação: Escreveu este módulo, inspirado na resposta de D.Deriso . Documentos aqui .
fonte
Você pode experimentar o Benchmark.js . Ele suporta muitas plataformas, entre elas também o node.js.
fonte
Você também pode tentar exectimer . Fornece feedback como:
[edit] Agora existe uma maneira mais simples de usar o exectimer, porque agora ele pode quebrar o código a ser medido. Seu código pode ser agrupado da seguinte maneira:
fonte
Eu tive o mesmo problema ao passar da AWS para o Azure
Para express & aws, você já pode usar time () existente e timeEnd ()
Para o Azure, use este: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Estes time () e timeEnd () usam a função hrtime () existente, que fornece tempo real de alta resolução.
Espero que isto ajude.
fonte
E outra opção é usar a ferramenta express-debug :
Convenientemente, oferece um painel de criação de perfil:
Além disso. Para adicionar às respostas acima, você pode verificar esta resposta para ativar qualquer código de criação de perfil apenas para o ambiente de desenvolvimento.
fonte