浏览器能够并行发送请求,但是每次并行发送请求的个数是有限制的,以 chrome 浏览器为例子:
同一个域名下,同一个 GET 请求的并发数是 1 ,也就是说只有上一个请求结束,才会执行下一个请求,否则置入队列等待发送。 同一个域名下,不同 GET/POST 请求的并发数是 6 。当发送的请求数量达到 6 个,并且都没有得到响应时,后面的请求会置入队列等待发送。
useEffect(
() => {
for (let i = 0; i < 10; i++) {
requestDelay();
}
console.log(randoms)
},
[])
const SLEEP_MS = 1000;
useEffect(() => {
const interval = setInterval(() => {
requestInstant();
}, SLEEP_MS);
return () => clearInterval(interval); // This represents the unmount function, in which you need to clear your interval to prevent memory leaks.
}, [])
requestDelay(); 这个方法在后端会无限超时(sleep 10000000 秒)。 requestInstant(); 这个方法会立即返回。
当前的表象是:
第一秒:requestDelay()已经发送出网络请求,后端已经收到。后续的 requestDelay()没有向后端发送请求,目测已经进入队列。
第二秒到第十几秒:每秒都会 requestInstant()请求到后端,且立即返回。
然后就是发送了五次 requestDelay()请求,后端已收到。
后续的 requestInstant()请求已经卡住,一直没有向后端发送请求。
疑问:我一直以为从第二秒开始就一直会每秒请求 requestInstant(),且立即返回。不知道为什么会后续又发送 5 次的 requestDelay()请求?老哥们帮忙解释下。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.