Dar*_*ren 1 javascript safari node.js express
我有一个非常简单的node.js
服务器,我用它来 ping 一些我需要保持在线的服务器。
使用Express,我可以访问一个非常简单的端点,它将执行请求循环并报告结果。
在每个循环上使用res.write()
,我加载的网页可以向我显示正在发生的进度。
问题是,这种进展不会发生在Safari
或OS X
上iOS
。它会等到该过程完成,然后一次性转储整个输出。
这是我的代码的示例:
router.route('/test').get(function(req, res)
{
res.write('<html><head></head><body>');
res.write('Starting tests...<br />');
performServerTests(req, res, function(results)
{ // Each loop within performServerTests also uses res.write()
res.write('<br />Complete');
res.end('</body></html>');
});
});
Run Code Online (Sandbox Code Playgroud)
是否有已知的原因导致 Safari 会等待调用res.end()
后再显示其已有的内容,而 Chrome 会res.write()
在收到消息时显示每条消息?
谢谢
小智 5
当使用分块传输(您正在尝试执行的操作)时,浏览器通常会在开始渲染之前等待接收到最少量的数据。确切的大小是特定于浏览器的 - 请参阅使用“传输编码:分块”,在浏览器开始渲染之前必须发送多少数据?有关于此的一些最新数据点。例如,您可以这样写(也添加一些显式的标头):
router.route('/test').get(function(req, res)
{
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.setHeader('Transfer-Encoding', 'chunked');
res.write('<html><head></head><body>');
res.write('Starting tests...<br />');
var buf = ""
for (var i = 0; i < 500; i++) {
buf += " "
}
res.write(buf);
performServerTests(req, res, function(results)
{ // Each loop within performServerTests also uses res.write()
res.write('<br />Complete');
res.end('</body></html>');
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1529 次 |
最近记录: |