在node.js中有`console.log`缓冲区输出吗?

我想知道是否console.log缓冲区输出在node.js或试图执行每个调用IO? 这似乎没有正式logging。

这个问题来自于输出一串string的必要性,我认为哪一个习语更有效率:

 array.forEach(function(line){ console.log(line) }) 

要么

 console.log(array.join('\n')) 

谢谢

console.log()的文档可能不会指定是否缓冲输出,因为它将该决策委托给基础stream :

 Console.prototype.log = function() { this._stdout.write(util.format.apply(this, arguments) + '\n'); }; 

writable.write()它使用文件缓冲的一般可能性:

返回值表示您是否应该继续写作。 如果数据必须在内部缓冲,那么它将返回false 。 否则,它将返回true

这个返回值是严格的咨询。 即使返回false ,你也可以继续写。 但是,写入操作将被caching在内存中,因此最好不要过多地执行此操作。 而是在写入更多数据之前等待drain事件。

但是,全局console使用的process.stdout更可能阻止,只在某些情况下缓冲:

process.stderrprocess.stdout不同于Node中的其他stream,写入它们通常是阻塞的。

  • 他们阻止的情况下,他们引用常规文件或TTY文件描述符。
  • 在这种情况下,他们指的是pipe道:
    • 他们在Linux / Unix中被阻塞。
    • 它们像Windows中的其他stream一样是非阻塞的。

要查看是否缓冲了任何line ,可以将它们写入.write()stdout自己并捕获返回值:

 var util = require('util'); var buffered = []; array.forEach(function(line){ buffered.push(!process.stdout.write(util.format(line) + '\n')); }); console.log(buffered);