Tengo un fragmento de código JavaScript que estoy ejecutando usando el 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");
}
});
}
¿Cómo puedo medir el tiempo que tardan estas operaciones de inserción de bases de datos? Podría calcular la diferencia de valores de fecha después y antes de este fragmento de código, pero eso sería incorrecto debido a la naturaleza asincrónica del código.
javascript
node.js
profiling
Sombra tormenta
fuente
fuente
timerlog
que es similarconsole.time()
pero con características adicionales; github.com/brillout/timerlogRespuestas:
Use el Node.js
console.time()
yconsole.timeEnd()
:fuente
Hay un método diseñado para esto. Echa un vistazo a process.hrtime (); .
Entonces, básicamente puse esto en la parte superior de mi aplicación.
Luego lo uso para ver cuánto duran las funciones. Aquí hay un ejemplo básico que imprime el contenido de un archivo de texto llamado "output.txt":
Aquí hay una prueba rápida que puede ejecutar en una terminal (BASH shell):
fuente
process.hrtime(start)
dos veces? ¿Hay alguna razón particular para ello?La invocación
console.time('label')
registrará la hora actual en milisegundos, luego la llamada posteriorconsole.timeEnd('label')
mostrará la duración desde ese punto.El tiempo en milisegundos se imprimirá automáticamente junto a la etiqueta, por lo que no tiene que hacer una llamada por separado a console.log para imprimir una etiqueta:
Para obtener más información, consulte los documentos de desarrollador de Mozilla en
console.time
.fuente
Sorprendido, nadie había mencionado aún las nuevas bibliotecas integradas:
Disponible en Nodo> = 8.5, y debe estar en Navegadores modernos
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Nodo 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Nodo 10.x
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
fuente
TypeError: performance.getEntriesByName is not a function
en Nodo v10.4.1Stability: 1 - Experimental
¿tal vez? :) nodejs.org/docs/latest-v8.x/api/…Para cualquiera que quiera obtener el valor del tiempo transcurrido en lugar de la salida de la consola:
use process.hrtime () como sugerencia de @ D.Deriso, a continuación es mi enfoque más simple:
fuente
fuente
var start = process.hrtime(); ... var end = process.hrtime(start);
para obtener tiempo de alta resolución (si necesito esperar una precisión de menos de milisegundos)Antigua pregunta, pero para una API simple y una solución ligera; puedes usar perfy que usa
process.hrtime
internamente el tiempo real de alta resolución ( ).Tenga en cuenta que cada vez que
perfy.end(label)
se llama, esa instancia se autodestruye.Divulgación: escribió este módulo, inspirado en la respuesta de D.Deriso . Documentos aquí .
fuente
Podrías probar Benchmark.js . Es compatible con muchas plataformas, entre ellas también node.js.
fuente
También puedes probar exectimer . Te da comentarios como:
[editar] Hay incluso una forma más simple de usar exectimer porque ahora puede envolver el código que se va a medir. Su código podría envolverse así:
fuente
Tuve el mismo problema al pasar de AWS a Azure
Para express & aws, ya puede usar time () y timeEnd () existentes
Para Azure, use esto: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Estos time () y timeEnd () utilizan la función hrtime () existente, que proporciona tiempo real de alta resolución.
Espero que esto ayude.
fuente
Y otra opción es usar la herramienta express-debug :
Ofrece convenientemente un panel de perfiles:
También. para agregar a las respuestas anteriores, puede verificar esta respuesta para habilitar cualquier código de creación de perfiles solo para el entorno de desarrollo.
fuente