472 votes

Comment mesurer la durée d’exécution de code javascript avec des rappels

J’ai un morceau de code javascript qui je suis l’exécution à l’aide de l’interprète de node.js.

Je veux savoir comment mesurer le temps pris par ces opérations d’insertion de db. J’ai pu calculer la différence de valeurs de Date après et avant ce morceau de code, mais qui serait incorrect en raison de la nature asynchrone du code.

989voto

user2362662 Points 549

Utilisez le Node.js `` et `` :

268voto

D.Deriso Points 875

Il y a une méthode qui est conçu pour cela. Découvrez processus.hrtime(); .

Donc, en gros, j'ai mis en haut de mon application.

var start = process.hrtime();

var elapsed_time = function(note){
    var precision = 3; // 3 decimal places
    var elapsed = process.hrtime(start)[1] / 1000000; // divide by a million to get nano to milli
    console.log(process.hrtime(start)[0] + " s, " + elapsed.toFixed(precision) + " ms - " + note); // print message + time
    start = process.hrtime(); // reset the timer
}

Puis-je l'utiliser pour voir combien de temps prise de fonctions. Voici un exemple de base qui imprime le contenu d'un fichier texte appelé "output.txt":

var debug = true;
http.createServer(function(request, response) {

    if(debug) console.log("----------------------------------");
    if(debug) elapsed_time("recieved request");

    var send_html = function(err, contents) {
        if(debug) elapsed_time("start send_html()");
        response.writeHead(200, {'Content-Type': 'text/html' } );
        response.end(contents);
        if(debug) elapsed_time("end send_html()");
    }

    if(debug) elapsed_time("start readFile()");
    fs.readFile('output.txt', send_html);
    if(debug) elapsed_time("end readFile()");

}).listen(8080);

Voici un petit test que vous pouvez exécuter dans un terminal (shell BASH):

for i in {1..100}; do echo $i; curl http://localhost:8080/; done

182voto

jfcorugedo Points 328

Appel console.time('label') enregistrera le temps actuel en millisecondes, puis plus tard appel console.timeEnd('label') affichera la durée à partir de là.

Le temps en millisecondes est automatiquement imprimé à côté de l’étiquette, donc vous n’avez pas à faire un appel séparé à console.log d’imprimer une étiquette.

18voto

Andrey Sidorov Points 9287
var start = +new Date();
var counter = 0;
for(var i = 1; i < LIMIT; i++){
    ++counter;
    db.users.save({id : i, name : "MongoUser [" + i + "]"}, function(err, saved) {
          if( err || !saved ) console.log("Error");
          else console.log("Saved");
          if (--counter === 0) 
          {
              var end = +new Date();
              console.log("all users saved in " + (end-start) + " milliseconds");
          }
    });
}

3voto

jsbeckr Points 618

Benchmark.js pourriez-vous donner un essai. Il supporte plusieurs plateformes parmi eux aussi node.js.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X