如果你的 Node.js 代码中充斥着 console.log 语句,那么你是否会引发性能问题?是否值得在调试/生产之间切换开关?我意识到日志记录在生产中很重要 - 但我通常很好奇控制台输出会对性能产生影响吗?
在 Chrome 中,如果控制台打开,则明显会降低性能。
如果你的 Node.js 代码中充斥着 console.log 语句,那么你是否会引发性能问题?是否值得在调试/生产之间切换开关?我意识到日志记录在生产中很重要 - 但我通常很好奇控制台输出会对性能产生影响吗?
在 Chrome 中,如果控制台打开,则明显会降低性能。
在Nodejs中,console.log调用是同步的,并会阻塞事件循环。我刚刚通过记录使用pg执行的(异步)SQL查询结果来体验到了这一点。仅记录20个项目及其(少量)属性就将本地机器上的性能从3ms降至300ms。
编辑:
console.log是同步的,它会阻塞事件循环。
我认为这是低挂果实,如果不在关键部分严格使用,则禁用日志记录几乎不会给您带来任何速度提升。可能console.log是以纯C代码实现的。此外,有一些可用的模块可在生产环境中关闭日志记录,就像您可以使用socket.io一样:
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(){};
console.log
是异步且非阻塞的,因此它不会太多地拖慢您的应用程序,除了函数调用需要一个tick。console.log
是同步的,它会阻塞事件循环。 - NoNameProvided
for in
来检查属性是否存在,并在检查之前记录了GAMES对象的console日志。结果出现了明显的延迟。(3-5秒) 我删除了console日志并重新检查了属性,这时速度瞬间就变快了。这是一个巨大的问题,因为这种延迟会使您的系统非常容易受到攻击,如果您在node内部使用速率限制器,则会非常危险(限制器将无法正常运行(或任何代码),直到io完成)。 - NiCk Newmanconsole.log
是同步的,它会阻塞事件循环。 - NoNameProvided