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