Utilisera la fonction 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 des scripts dans les environnements de production?
Existe-t-il une approche pour désactiver les journaux de console dans les environnements de production à partir d'un emplacement de configuration unique?
javascript
performance
Sudantha
la source
la source
console.log
prend ~ 50msRéponses:
Si vous allez avoir ceci sur un site public ou quelque chose comme ça, toute personne ayant peu de connaissances sur 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.
L'une des meilleures approches consiste à intégrer l'
console.log
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 à l'aide du compilateur Closure .Alors, pour répondre à vos questions:
mais de manière négligeable.la source
conosle.log
fera toujours un coup à la fonction remplacée n'est-ce pas?console.log
de consigner des objets provoque une fuite de mémoire car le navigateur conserve la structure de l'objet pour permettre aux développeurs d'étendre le journal.En fait,
console.log
c'est beaucoup plus lent qu'une fonction vide. L'exécution de ce test jsPerf sur mon Chrome 38 donne des résultats étonnants:console.log
est environ 10000 fois plus lent que l'appel d'une fonction vide,Non pas que vous remarquiez le décalage des performances si vous avez un nombre raisonnable d'
console.…
appels qui se déclenchent une fois (une centaine prendra 2 ms sur mon installation de Chrome - ou 20 ms lorsque la console est ouverte). Mais si vous enregistrez des choses sur la console à plusieurs reprises - par exemple, enrequestAnimationFrame
les connectant - cela peut rendre les choses saccadées.Mettre à jour:
Dans ce test, j'ai également vérifié l'idée d'un «journal caché» personnalisé pour la production - ayant une variable qui contient les messages de journal, disponibles sur demande. Il s'avère être
console.log
,la source
console.log
si. Les deux sont des fonctions qui produisent des effets secondaires.console.log
en soi, n'a pas vraiment d'impact sur les performances d'une manière que vous remarquerez à moins que vous ne le liez à un gestionnaire de défilement / redimensionnement. Ceux-ci sont appelés beaucoup et si votre navigateur doit envoyer du texte à la console 30 / 60x par seconde, cela peut devenir moche. Et puis il y a ce bug IE qui ne vous permettait pas d'avoirconsole.log
du tout avec la console fermée :(logging-on x 3,179 ops/sec ±2.07% (56 runs sampled)
logging-off x 56,058,330 ops/sec ±2.87% (56 runs sampled)
logging-off-stringify x 1,812,379 ops/sec ±3.50% (58 runs sampled)
log-nothing x 59,509,998 ops/sec ±2.63% (59 runs sampled)
la source
Si vous créez un raccourci vers la console dans un script de base commun, par exemple:
puis utilisez con.log ("message") ou con.error ("message d'erreur") dans tout votre code, en production, vous pouvez simplement recâbler con à l'emplacement principal pour:
la source
console.log = function(){}
Bien sûr,
console.log()
cela réduira les performances de votre programme car cela prend du temps de calcul.Placez ce code au début de votre script pour remplacer la fonction standard console.log par une fonction vide.
la source
Tout appel de fonction réduira légèrement les performances. Mais quelques-uns
console.log
ne devraient avoir aucun effet notable.Cependant, cela générera des erreurs non définies dans les navigateurs plus anciens qui ne prennent pas en charge
console
la source
La baisse des performances sera minime, 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 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 celui-ci fonctionnerait:Voici un violon: http://jsfiddle.net/enDDV/
la source
J'ai fait ce test jsPerf: http://jsperf.com/console-log1337
Cela ne semble pas prendre plus de temps que les autres appels de fonction.
Qu'en est-il des navigateurs qui n'ont pas d'API console? Si vous devez utiliser 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 Paul le suggère dans sa réponse.
la source
Je le fais de cette façon pour conserver la signature originale des méthodes de la console. Dans un emplacement commun, chargé avant tout autre JS:
Puis tout au long du code
la source