假如有几十个请求,如何去控制并发?

场景举例:图片或文件批量下载(重点是并发,同时调接口)

实现:利用Promise模拟任务队列,从而实现请求池效果。

大致原理:先进先出,在第一个已进入任务完成后,第(队列数量限制数量+1) 个任务才会进入请求池,push一个的同时就会有一个被shift

废话不多说源码如下

import axios from 'axios'

export const handQueue = (
  reqs // 请求总数
) => {
  reqs = reqs || []


  const requestQueue = (concurrency) => {
    concurrency = concurrency || 6 // 最大并发数
    const queue = [] // 请求池
    let current = 0

    const dequeue = () => {//递归函数,当前并发级别执行请求
        //它检查当前计数是否小于最大并发级别(concurrency),
        //以及是否还有待处理的请求在 queue 数组中。
        //如果两个条件都满足,则增加 current 计数
        //从 queue 数组中取出一个请求 promise 工厂,使用 .then() 和 .catch() 执行它
        //并在最后减少 current 计数,并递归调用自身以处理下一个请求。
      while (current < concurrency && queue.length) {
        current++;
        const requestPromiseFactory = queue.shift() // 出列
        requestPromiseFactory()
          .then(() => { // 成功的请求逻辑
          })
          .catch(error => { // 失败
            console.log(error)
          })
          .finally(() => {
            current--
            dequeue()
          });
      }

    }

    return (requestPromiseFactory) => {
      queue.push(requestPromiseFactory) // 入队
      dequeue()
    }

  }

  const enqueue = requestQueue(6)//将请求添加到请求队列中,并控制并发请求数量为最多 6 个。

  for (let i = 0; i < reqs.length; i++) {
    //for 循环遍历 reqs 数组中的每个元素,使用索引 i 进行迭代。
    enqueue(() => axios.get('/api/test' + i))
  }
}


 

对于一个页面包含多个异步请求的接口,进行性能测试时可以采取以下步骤: 1. 确定性能测试的目标和指标:明确需要测试的性能指标,例如响应时间、吞吐量、并发用户数等。 2. 制定性能测试计划:根据页面中的异步请求接口,制定测试计划,包括测试的范围、测试的时间段和持续时间等。 3. 设置测试环境:搭建适合进行性能测试的测试环境,包括服务器、网络等,并确保环境的稳定性和准确性。 4. 编写性能测试脚本:根据页面中的异步请求接口,编写性能测试脚本,模拟多个并发用户同时访问这些接口。 5. 进行负载测试:使用性能测试工具,例如JMeter或LoadRunner,进行负载测试,模拟多个并发用户同时访问页面中的异步请求接口。 6. 监控和分析结果:监控性能测试过程中的各项指标,例如响应时间、服务器资源利用率等,并进行结果分析,找出性能瓶颈和优化建议。 7. 优化和再测试:根据性能测试结果分析,针对性能瓶颈进行优化,并进行再次性能测试,以验证优化效果。 8. 生成性能测试报告:根据性能测试结果和分析,生成性能测试报告,记录测试过程、结果和优化建议,供开发团队参考。 在进行性能测试时,还需要注意以下几点: - 确保测试环境与实际生产环境尽可能接近,以保证测试结果的可靠性。 - 针对不同的异步请求接口设置适当的并发用户数,并调整模拟用户的行为和负载情况,以模拟真实的用户场景。 - 监控服务器资源的使用情况,例如CPU、内存、网络带宽等,确保服务器能够承受测试负载。 - 进行多次测试,并取多次测试结果的平均值,以获得更准确的性能指标。 - 定期进行性能测试,以便及时发现和解决潜在的性能问题。 通过以上步骤和注意事项,您可以对页面中包含多个异步请求接口进行有效的性能测试,并找出性能瓶颈和优化方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值