【问题标题】:Node.js console.log performanceNode.js 控制台日志性能
【发布时间】:2011-10-14 18:39:54
【问题描述】:

如果您的 Node.js 代码中充斥着 console.log 语句,您是否会引发性能问题?是否值得调试/生产切换它的开/关?我意识到日志记录通常对 prod 很重要 - 但我通常很好奇控制台输出是否会影响性能?

在 Chrome 中,如果控制台打开,它肯定会降低性能。

【问题讨论】:

    标签: performance node.js console logging


    【解决方案1】:

    编辑:

    console.log 是同步的,它阻塞了事件循环


    我认为这是唾手可得的成果,当您禁用日志记录时(如果未在关键部分严格使用),几乎不会给您带来任何减速。可能console.log 是用纯C 实现的。还有一些可用的模块可以关闭生产中的日志记录,就像您可以使用socket.io 一样:

    【讨论】:

    • @Raynos 比@Raynos 更好,但仍然使用库来设置日志级别会派上用场。
    • @Raynos 错误。它极大地影响性能。我刚刚用我的GAMES 对象中的 60,000 个键对 console.log 进行了测试。然后,只需执行for in 来检查属性是否存在,同时控制台在检查之前记录 GAMES 对象。并且出现了明显的延迟。 (3-5 秒)我删除了控制台日志并再次重新检查了属性,它是即时的。这是一个巨大的问题,因为如果您在节点内部使用速率限制器,这种延迟会使您的系统非常脆弱。 (限制器在 io 完成之前无法正常运行(或任何代码),非常危险)。
    • 请注意console.log同步的,它阻塞了事件循环。
    【解决方案2】:

    nodejs 中的console.log 调用是同步的(!)并阻塞事件循环。当我使用 pg 记录执行(异步)sql 查询的结果时,我刚刚体验到了这一点。仅记录 20 个项目及其(少数)属性将我的本地计算机上的性能从 3 毫秒降低到 300 毫秒。

    【讨论】:

      【解决方案3】:

      如上所述,console.log 是异步且非阻塞的,因此除了函数调用的一个滴答声外,它不会使您的应用程序减慢太多。

      但是在生产环境中部署时使用一些模块关闭某些级别的日志而不是直接使用console.log是一个好习惯。 @Alfred 列出了几个不错的。

      Nodejs 官博发了一篇文章建议使用 JSON 格式进行日志记录,查看Service logging in JSON with BunyanBunyan for nodejs 真的值得一试。

      【讨论】:

      • 请注意console.log同步的,它阻塞了事件循环
      【解决方案4】:

      console.log 减慢了 chrome 的速度,因为它实际上在每次调用时都与 DOM 交互。整个inspect element 系统实际上只是大量的 DOM 元素。当您在浏览器中调用 console.log 时,它必须在每次调用时将新元素附加到 console

      您可以通过右键单击console 中的元素并单击inspect element 来查看console.log 是如何真正成为HTML 的。这实际上会打开一个新的console,检查一个已经存在的console。 :D

      如果您真的很担心性能,您可以完全删除console.log 功能(不建议这样做,因为它可能会让人感到困惑)。您基本上可以在浏览器或服务器端使用noop 功能。没有更多的console.log 没有更多的速度影响:D

      console.log=function(){};
      

      【讨论】:

      • 感谢您的回答,我对此投了赞成票,但选择 @Alfred 作为答案,因为它专门针对 node.js 回答。但是关于 chrome 及其不同之处的信息很有用。
      • (至少在工作速度较慢的机器上)一旦您将 >1000 项记录到日志中,chrome 问题就会非常明显。但是,只有在您打开开发工具时它才会变慢,因此对于大多数用户来说,这在生产中应该不是问题。
      • @UpTheCreek 它仍然是同步的
      • 与控制台日志相比,是否有任何库可供客户端库使用并提供更好的性能?
      • @TGW 您可以简单地将值附加到使用 setTimeout 定期显示的变量中。
      猜你喜欢
      • 2015-03-26
      • 2012-09-14
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多