L'utilisation de la fonctionnalité de débogage console.log
réduira-t-elle les performances d'exécution de JavaScript? Cela affectera-t-il la vitesse d'exécution du script dans les environnements de production?
Existe-t-il une approche pour désactiver les journaux de la console dans les environnements de production à partir d'un seul emplacement de configuration?
Si vous envisagez de placer ceci sur un site public ou quelque chose du genre, toute personne peu familiarisée avec l'utilisation des outils de développement peut lire vos messages de débogage. Selon ce que vous enregistrez, cela peut ne pas être un comportement souhaitable.
Une des meilleures approches consiste à insérer le console.log
dans l’une de vos méthodes et à vérifier les conditions et à l’exécuter. Dans une version de production, vous pouvez éviter d'avoir ces fonctions. Cette question Stack Overflow explique en détail comment faire de même avec le compilateur Closure .
Alors, pour répondre à vos questions:
En fait, console.log
est beaucoup plus lent qu'une fonction vide. L'exécution de ce test jsPerf sur mon Chrome 38 donne des résultats stupéfiants:
console.log
équivaut à environ 10 000 fois plus lent que d'appeler une fonction vide,Cela ne signifie pas que vous remarquerez le décalage des performances si vous avez un nombre raisonnable d'appels console.…
qui se déclenchent une fois (une centaine prendra 2 ms pour mon installation de Chrome - ou 20 ms lorsque la console est ouverte). Mais si vous enregistrez à plusieurs reprises des éléments sur la console - par exemple, en les connectant via requestAnimationFrame
-, les choses peuvent devenir instables.
Dans ce test J'ai également testé l'idée d'un "journal masqué" personnalisé pour la production - ayant une variable contenant les messages du journal, disponibles à la demande. Il s'avère être
console.log
natif,Si vous créez un raccourci vers la console dans un script de base commun, par exemple:
var con = console;
puis utilisez con.log ("message") ou con.error ("message d'erreur") dans tout votre code. Lors de la production, vous pouvez simplement recâbler con dans l'emplacement principal pour:
var con = {
log: function() {},
error: function() {},
debug: function() {}
}
const DEBUG = true / false
DEBUG && console.log('string')
Tout appel de fonction réduit légèrement les performances. Mais quelques console.log
ne devraient pas avoir d’effet notable.
Cependant, il générera des erreurs non définies dans les anciens navigateurs qui ne prennent pas en charge console
Les performances seront minimes, mais dans les navigateurs plus anciens, cela provoquera des erreurs JavaScript si la console des navigateurs des utilisateurs n'est pas ouverte log is not a function of undefined
. Cela signifie que tout le code JavaScript après l'appel de console.log ne sera pas exécuté.
Vous pouvez créer un wrapper pour vérifier si window.console
est un objet valide, puis appeler console.log dans le wrapper. Quelque chose de simple comme ceci fonctionnerait:
window.log = (function(console) {
var canLog = !!console;
return function(txt) {
if(canLog) console.log('log: ' + txt);
};
})(window.console);
log('my message'); //log: my message
Voici un violon: http://jsfiddle.net/enDDV/
J'ai fait ce test jsPerf: http://jsperf.com/console-log1337
Cela ne semble pas prendre plus longtemps que les autres appels de fonction.
Qu'en est-il des navigateurs qui ne disposent pas d'une API de console? Si vous devez utiliser le fichier console.log pour le débogage, vous pouvez inclure un script dans votre déploiement de production pour remplacer l'API de la console, comme le suggère Paul dans sa réponse.
L'utilisation de la fonctionnalité de débogage console.log réduira-t-elle JavaScript performance d'exécution? Cela affectera-t-il la vitesse d'exécution du script dans environnements de production?
Bien entendu, console.log()
réduira les performances de votre programme car cela prend du temps de calcul.
Existe-t-il une approche pour désactiver les journaux de la console en production environnements à partir d’un seul emplacement de configuration?
Placez ce code au début de votre script pour remplacer la fonction standard console.log par une fonction vide.
console.log = function () { };