在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.stderr
和process.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);