簡體   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