在我的服务器上请求资源时,Mac OS出现网络问题(问题不是一直存在)。但是,我可以通过使用JavaScript依次顺序请求1000次随机资源来重现该问题。
var req = (id) => fetch('https://www.example.com/my/resource/starter.js?' + id);
// use the 'limit' as identifier
var doRecursiveRequest = (limit) =>
req(limit).then(res => {
if (--limit) {
return doRecursiveRequest(limit);
}
});
doRecursiveRequest(1000);
在“网络”标签中,我看到资源加载非常快。请求计数器快速计数,并且突然停止。此后大约需要30秒,并且一直持续到再次停止(总是在几百次请求之后)。一段时间后,所有请求将成功完成。
通过使用Google Devtools(“效果”标签),我可以看到问题所在,但我不了解原因。
在某个时刻,有6个并行的网络任务正在运行(全部由我的JavaScript执行)。 Chrome似乎最多允许并行执行6个此类微任务。之后,最多需要30秒,直到一个被“杀死”(?!),然后允许下一个开始。但是,在服务器端,响应时间都非常快(所有1000个请求都已到达服务器并发送了响应)。
其他信息:
答案 0 :(得分:0)
事实证明,带有Keep-Alive
标头的HTTP响应引起了该问题。禁用保持活动机制并添加Content-Length
标头后,该问题将不再重现。
这似乎是一个已知问题,请参见https://stackoverflow.com/a/25996971/9816335