Ale*_*sha 7 javascript node.js
我想知道console.log缓冲区是否在node.js中输出或尝试在每次调用时执行IO?这似乎没有正式记录.
问题产生于输出字符串数组的必要性,我认为哪个成语更有效:
array.forEach(function(line){
console.log(line)
})
Run Code Online (Sandbox Code Playgroud)
要么
console.log(array.join('\n'))
Run Code Online (Sandbox Code Playgroud)
谢谢
该文档console.log()可能没有指定是否缓冲输出,因为它将该决策委托给基础流:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
Run Code Online (Sandbox Code Playgroud)
在writable.write()它的使用文件缓存的一般可能性:
返回值表示您是否应该立即继续写作.如果数据必须在内部缓冲,那么它将返回
false.否则,它将返回true.这个返回值是严格的建议.你可以继续写,即使它返回
false.但是,写入将缓冲在内存中,因此最好不要过度执行此操作.相反,drain在写入更多数据之前等待事件.
但是,全局console使用process.stdout更有可能阻止,仅在某些情况下缓冲:
process.stderr与process.stdoutNode中的其他流不同,写入它们通常是阻塞的.
- 如果它们引用常规文件或TTY文件描述符,它们就会阻塞.
- 在他们引用管道的情况下:
- 它们在Linux/Unix中受阻.
- 它们像Windows中的其他流一样是非阻塞的.
要查看是否任何lines的缓冲,可以.write()他们stdout自己和获取返回值:
var util = require('util');
var buffered = [];
array.forEach(function(line){
buffered.push(!process.stdout.write(util.format(line) + '\n'));
});
console.log(buffered);
Run Code Online (Sandbox Code Playgroud)