I wonder if console.log
buffers output in node.js or tries to perform IO on each invocation? This doesn't seem to be officially documented.
The question arose from the necessity to output an array of strings and I think which idiom is more efficient:
array.forEach(function(line){
console.log(line)
})
or
console.log(array.join('\n'))
Thanks
The documentation for console.log()
probably doesn't specify whether it buffers output because it delegates that decision to an underlying stream :
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
The writable.write()
it's using documents the general possibility of buffering:
The return value indicates if you should continue writing right now. If the data had to be buffered internally, then it will return
false
. Otherwise, it will returntrue
.This return value is strictly advisory. You MAY continue to write, even if it returns
false
. However, writes will be buffered in memory, so it is best not to do this excessively. Instead, wait for thedrain
event before writing more data.
Though, the global console
uses process.stdout
that's more likely to block, buffering only under certain circumstances:
process.stderr
andprocess.stdout
are unlike other streams in Node in that writes to them are usually blocking.
- They are blocking in the case that they refer to regular files or TTY file descriptors.
- In the case they refer to pipes:
- They are blocking in Linux/Unix.
- They are non-blocking like other streams in Windows.
To see whether any line
s are buffered, you could .write()
them to stdout
yourself and capture the return value:
var util = require('util');
var buffered = [];
array.forEach(function(line){
buffered.push(!process.stdout.write(util.format(line) + '\n'));
});
console.log(buffered);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.