[英]Does `console.log` buffer output in node.js?
我想知道console.log
缓冲node.js中的输出还是尝试在每次调用时执行IO? 这似乎没有正式记录。
问题产生于输出字符串数组的必要性,我认为哪个成语更有效:
array.forEach(function(line){
console.log(line)
})
要么
console.log(array.join('\n'))
谢谢
console.log()
的文档可能没有指定它是否缓冲输出,因为它将该决策委托给基础流 :
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
writable.write()
它正在使用文档缓冲的一般可能性:
返回值表示您是否应该立即继续写作。 如果数据必须在内部缓冲,那么它将返回
false
。 否则,它将返回true
。这个返回值是严格的建议。 你可以继续写,即使它返回
false
。 但是,写入将缓冲在内存中,因此最好不要过度执行此操作。 相反,在写入更多数据之前等待drain
事件。
但是,全局console
使用的process.stdout
更可能阻止,仅在某些情况下缓冲:
process.stderr
和process.stdout
与Node中的其他流不同,对它们的写入通常是阻塞的。
- 如果它们引用常规文件或TTY文件描述符,它们就会阻塞。
- 在他们引用管道的情况下:
- 它们在Linux / Unix中受阻。
- 它们像Windows中的其他流一样是非阻塞的。
要查看是否缓冲了任何line
,您可以.write()
它们自己.write()
为stdout
并捕获返回值:
var util = require('util');
var buffered = [];
array.forEach(function(line){
buffered.push(!process.stdout.write(util.format(line) + '\n'));
});
console.log(buffered);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.