J'ai un morceau de code JavaScript que j'exécute à l'aide de l' node.js
interpréteur.
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");
}
});
}
Comment puis-je mesurer le temps pris par ces opérations d'insertion de base de données? Je pourrais calculer la différence des valeurs de date après et avant ce morceau de code, mais ce serait incorrect en raison de la nature asynchrone du code.
javascript
node.js
profiling
Stormshadow
la source
la source
timerlog
ce qui est similaireconsole.time()
mais avec des fonctionnalités supplémentaires; github.com/brillout/timerlogRéponses:
Utilisez Node.js
console.time()
etconsole.timeEnd()
:la source
Il existe une méthode conçue pour cela. Découvrez process.hrtime (); .
Donc, j'ai essentiellement mis cela en haut de mon application.
Ensuite, je l'utilise pour voir combien de temps les fonctions prennent. Voici un exemple de base qui imprime le contenu d'un fichier texte appelé "output.txt":
Voici un test rapide que vous pouvez exécuter dans un terminal (shell BASH):
la source
process.hrtime(start)
deux fois? Y a-t-il une raison particulière à cela?L'
console.time('label')
appel enregistrera l'heure actuelle en millisecondes, puis l'appel ultérieurconsole.timeEnd('label')
affichera la durée à partir de ce point.Le temps en millisecondes sera automatiquement imprimé à côté de l'étiquette, vous n'avez donc pas à appeler séparément console.log pour imprimer une étiquette:
Pour plus d'informations, consultez la documentation des développeurs de Mozilla sur
console.time
.la source
Surpris, personne n'avait encore mentionné la nouvelle bibliothèque intégrée:
Disponible dans Node> = 8.5, et devrait être dans Modern Browers
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Noeud 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Noeud 10.x
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
la source
TypeError: performance.getEntriesByName is not a function
dans Node v10.4.1Stability: 1 - Experimental
peut être? :) nodejs.org/docs/latest-v8.x/api/…Pour quiconque souhaite obtenir la valeur du temps écoulé au lieu de la sortie de la console:
utilisez process.hrtime () comme suggestion @ D.Deriso, voici mon approche plus simple:
la source
la source
var start = process.hrtime(); ... var end = process.hrtime(start);
pour obtenir un temps de haute résolution (si je dois m'attendre à une précision inférieure à la milliseconde)Vieille question mais pour une API simple et une solution légère; vous pouvez utiliser perfy qui utilise en temps réel haute résolution (
process.hrtime
) en interne.Notez qu'à chaque
perfy.end(label)
appel, cette instance est automatiquement détruite.Divulgation: A écrit ce module, inspiré par la réponse de D.Deriso . Documents ici .
la source
Vous pouvez essayer Benchmark.js . Il prend en charge de nombreuses plates-formes, dont node.js.
la source
Vous pouvez également essayer exectimer . Il vous donne des commentaires comme:
[edit] Il y a même un moyen plus simple maintenant d'utiliser exectimer car maintenant il peut envelopper le code à mesurer. Votre code pourrait être enveloppé comme ceci:
la source
J'ai eu le même problème lors du passage d'AWS à Azure
Pour express & aws, vous pouvez déjà utiliser, time () et timeEnd () existants
Pour Azure, utilisez ceci: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Ces fonctions time () et timeEnd () utilisent la fonction hrtime () existante, qui donne du temps réel à haute résolution.
J'espère que cela t'aides.
la source
Et une autre option consiste à utiliser l' outil de débogage express :
Il offre commodément un panneau de profilage:
Aussi. pour ajouter aux réponses ci-dessus, vous pouvez cocher cette réponse pour activer tout code de profilage uniquement pour l'environnement de développement.
la source