105 votes

Devrais-je supprimer console.log du code de production?

J'ai actuellement ce traitement JS partout dans mon code:

window.console && console.log("Foo");

Je me demande si c'est coûteux à tous, ou a des effets secondaires négatifs de la production.

Suis-je libre de quitter le côté client de la connexion, ou faut-il aller?

EDIT: En fin de compte, je suppose que le meilleur argument que je (et quelqu'un d'autre?) peut arriver, c'est qu'il est peut-être non-négligeable de la quantité de données transférées entre le serveur et le client en laissant des messages de journalisation gauche en. Si le code de production est entièrement optimisé, l'enregistrement devra être enlevée pour réduire la taille de javascript d'être envoyé au client.

53voto

craigb Points 10622

Une autre façon de traiter ce problème est de 'stub' la console de l'objet quand il n'est pas défini, donc pas d'erreurs sont jetés dans des contextes qui n'ont pas la console, c'est à dire

if (!window.console) {
  var noOp = function(){}; // no-op function
  console = {
    log: noOp,
    warn: noOp,
    error: noOp
  }
}

vous voyez l'idée... il y a beaucoup de fonctions définies sur les différentes implémentations de la console, de sorte que vous pourriez stub tous ou juste ceux que vous utilisez (par exemple, si vous n'utilisez jamais d' console.log et n'est jamais utilisé console.profile, console.time etc...)

C'est pour moi le meilleure alternative de développement que d'ajouter des conditions à l'avant de chaque appel, ou de ne pas les utiliser.

voir aussi: Est-ce une mauvaise idée de laisser firebug "de la console.journal d'appels dans votre production de code JavaScript?

40voto

Rob W Points 125904

Vous ne devez pas ajouter d'outils de développement à une page de production.

Pour répondre à l’autre question: le code ne peut avoir d’effet secondaire négatif:

  • window.console deviendra faux si console n'est pas défini
  • console.log("Foo") imprimera le message sur la console une fois défini (à condition que la page ne remplace pas console.log par une non-fonction).

28voto

Alexander Points 353

UglifyJS2

Si vous utilisez ce minifier, vous pouvez définir l’ option drop_console :

Passez true pour rejeter les appels à la console. * Fonctions

16voto

wutz Points 1739

Si la minification fait partie de votre processus de construction, vous pouvez l'utiliser pour supprimer le code de débogage, comme expliqué ici avec le compilateur de fermetures Google: Exclure le code javascript de débogage lors de la minification

 if (DEBUG) {
  console.log("Won't be logged if compiled with --define='DEBUG=false'")
}
 

Si vous compilez avec des optimisations avancées, ce code sera même identifié comme mort et entièrement supprimé

5voto

MK_Dev Points 2221

Oui. console.log lève une exception dans les navigateurs qui ne le supportent pas (aucun objet console ne sera trouvé).

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