假如现在有几十、上百个请求,我们该如何去控制这么高的并发呢?
给你一分钟时间,稍作思考 ~ 🤔
此场景有很多,比如 图片或文件批量下载、RSSHub高速抓取内容。。。
第一想法是不是请求池!!! 没错, 利用Promise
模拟任务队列,从而实现请求池效果。
正文
众所周知,浏览器发起的请求最大并发数量一般都是 6~8
个,这是因为浏览器会限制同一域名下的并发请求数量,以避免对服务器造成过大的压力。
👇 先来模拟一下同时发起大量请求
// 模拟大量请求的函数
async function simulateConcurrentRequests(url, numberOfRequests) {
const requests = Array.from({
length: numberOfRequests }, () => fetch(url));
try {
const responses = await Promise.all(requests);
const results = await Promise.all(responses.map(response => response.json()));
return results;
} catch (error) {
console.error('One or more requests failed:', error);
return [];
}
}
// 使用示例
const url = 'https://jsonplaceholder.typicode.com/posts/1';