繁体   English   中英

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

[英]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.stderrprocess.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM