console.log会减lessJavaScript的执行性能吗?

将使用console.log的debuggingfunction降低JavaScript的执行性能? 它会影响生产环境中脚本执行的速度吗?

有没有一种方法从一个configuration位置禁用生产环境中的控制台日志?

如果您打算在公共站点上使用这些工具,那么任何对使用开发人员工具知之甚less的人都可以阅读您的debugging信息。 根据你所logging的内容,这可能不是一个理想的行为。

最好的方法之一是将console.log包装在你的一个方法中,并在那里你可以检查条件并执行它。 在生产版本中,您可以避免使用这些function。 这个堆栈溢出问题详细讨论了如何使用Closure编译器做同样的事情。

所以,要回答你的问题:

  1. 是的,它会降低速度,尽pipe只是可以忽略不计。
  2. 但是,不要使用它,因为一个人读取日志太容易了。
  3. 这个问题的答案可能会给你提示如何从生产中删除它们。

实际上, console.log比一个空的函数要慢很多。 在我的Chrome 38上运行这个jsPerftesting可以获得惊人的结果:

  • 当浏览器控制台closures时,调用console.log比调用一个空函数慢大约10 000倍
  • 当控制台打开的时候,调用它比慢10万倍

如果你有一个合理的console.…数量,那么你不会注意到性能滞后console.…一次触发(一百次会在我安装的Chrome上花费2毫秒 – 或者在控制台打开时花费20毫秒)。 但是,如果你重复login到控制台 – 例如,通过requestAnimationFrame挂钩 – 它可以让事情变得更加激动人心。

更新:

在这个testing中,我也检查了生产的定制“隐藏日志”的想法 – 有一个variables持有日志消息,可根据需要提供。 事实certificate是

  • 大约比原生console.log1000倍
  • 如果用户打开控制台,显然要快10000倍。

如果您在公共核心脚本中创build控制台的快捷方式,例如:

 var con = console; 

然后在整个代码中使用con.log(“message”)或con.error(“error message”),在生产中,您可以简单地将核心位置中的con连接到:

 var con = { log: function() {}, error: function() {}, debug: function() {} } 

任何函数调用都会稍微降低性能。 但是一些console.log应该不会有什么明显的影响。

但是,它会在不支持console旧浏览器中引发未定义的错误

我做了这个jsPerftesting: http ://jsperf.com/console-log1337

似乎没有比其他函数调用更长的时间。

那些没有控制台API的浏览器呢? 如果您需要使用console.log进行debugging,则可以在生产部署中包含脚本来覆盖控制台API,就像Paul在答案中所build议的那样。

 const DEBUG = true / false DEBUG && console.log('string') 

性能命中将是最小的,但是在旧版浏览器中,如果用户浏览器控制台未打开,则会导致JavaScript错误log is not a function of undefined 。 这意味着console.log调用之后的所有JavaScript代码将不会执行。

你可以创build一个包装来检查window.console是否是一个有效的对象,然后在包装中调用console.log。 像这样简单的东西可以工作:

 window.log = (function(console) { var canLog = !!console; return function(txt) { if(canLog) console.log('log: ' + txt); }; })(window.console); log('my message'); //log: my message 

这是一个小提琴: http : //jsfiddle.net/enDDV/