Actually, it seems more like the output has to be a certain size before the browser renders it. Probably the buffer at the browser end. When you send res.end()
the browser flushes this buffer and renders all that's in the buffer straightaway. However, if no res.end()
is send, the browser awaits till its buffer is filled.
I tried experimenting the following block of code with Firefox and curl.
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write("hello\n");
for (var i = 0; i < 100; i++) {
setTimeout(function() {
res.write("world lotsa text here lotsa text\n");
}, 400*i);
}
}).listen(3000);
You can try it yourself by heading to http://localhost:3000/ after running node with the above code.
I then tried the same thing with curl, and every line appeared straightaway as it was sent from the server.
The curl command I used was simply:
curl http://localhost:3000/
Note the newlines I inserted in the res.write as curl will wait for the newlines before outputting to stdout.