我正在试验来自一个简单的NodeJS HTTP服务器的各种响应。我试图达到的效果是更快地呈现网页的视觉效果。因为响应是通过transfer-encoding: chunked
流式传输到浏览器的(对吗?)我在想,我可以先呈现页面布局,延迟一段时间后再呈现其余的数据。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
, 'Transfer-Encoding': 'chunked'
});
res.write('<html>\n');
res.write('<body>\n');
res.write('hello ');
res.write('</body>\n');
res.write('</html>\n');
setTimeout(function () {
res.end('world');
},1500);
}).listen(3000, '127.0.0.1');
问题是,除非已经写入的数据足够长,否则响应似乎直到res.end('world')
才会发送,因此,例如res.write(new Array(2000).join('1'))
而不是res.write('hello')
就可以做到这一点。
Node是否会缓冲我的写入,直到数据足够大,可以发送?如果是这样,块大小是可配置的吗?
发布于 2012-03-18 01:07:26
在读取结束标记之前,浏览器可能不会呈现数据。尝试输出纯文本而不是html标记来测试这一点。
你看到firebug / chrome检查器中有任何输入吗?
http://nodejs.org/api/stream.html#stream_stream_write_string_encoding_fd:
将具有给定编码的字符串写入流。如果字符串已刷新到内核缓冲区,则返回true。返回false表示内核缓冲区已满,数据将在将来发送出去。
因此,输出.write()
方法的结果。看看它是返回true还是false。
https://stackoverflow.com/questions/9751711
复制相似问题