Console.time () est-il sécurisé dans node.js?

J'ai un petit extrait de code node.js en face de moi qui ressemble à ceci:

console.time("queryTime"); doAsyncIOBoundThing(function(err, results) { console.timeEnd("queryTime"); // Process the results... }); 

Et bien sûr, lorsque je l'exécute sur mon système de développement (sinon inactif), je reçois un bon message de console comme celui-ci:

 queryTime: 564ms 

Cependant, si je mettais cela en production, il n'y aura probablement pas plusieurs appels asynchrones en cours simultanément, et chacun d'eux remplacera la minuterie précédente? Ou le noeud a-t-il une sorte de contexte d'exécution magique qui donne à chaque «thread d'exécution» un espace de noms de temporisateur de console distinct?

Utilisez simplement des étiquettes uniques et cela sera sécurisé. C'est pourquoi vous utilisez une étiquette, pour identifier de manière unique l'heure de début.

La raison en est assez simple: console.time et console.timeEnd sont l'une des fonctions les plus simples du monde ( source ):

 Console.prototype.time = function(label) { this._times.set(label, Date.now()); }; Console.prototype.timeEnd = function(label) { var time = this._times.get(label); if (!time) { throw new Error('No such label: ' + label); } var duration = Date.now() - time; this.log('%s: %dms', label, duration); }; 

Tant que vous n'utilisez pas accidentellement une étiquette deux fois, tout fonctionnera exactement comme prévu. Notez également que le node n'a généralement qu'un seul thread d'exécution.

Ce code simple ne fonctionnerait-il pas?

 var labelWithTime = "label " + Date.now(); console.time(labelWithTime); // Do something console.timeEnd(labelWithTime);