Skip to content

[feature] 优化自定义重发(Custom Repeat)性能,并增加可配置并发数 #2942

Description

@BlackCake-L

问题描述

目前 Reqable 的**自定义重发(Custom Repeat)**功能,在重发次数较大时存在比较明显的性能问题。

例如,当重发次数设置为 5000 次时,Reqable 会出现严重卡顿,甚至整个应用近似“卡死”,此时 UI 基本无法正常操作。

另外,目前自定义重发似乎也没有提供并发数(Concurrency)配置,因此无法方便地控制同时发送多少个请求。

这会限制 Custom Repeat 在压力测试、并发测试以及竞态条件(Race Condition)测试中的使用。


当前表现

例如设置:

重发次数:5000

开始执行后:

  • Reqable 会出现明显卡顿;
  • 当任务规模进一步增大时,甚至可能完全无响应;
  • UI 操作受到明显影响;
  • 无法配置请求的并发数;
  • 大量请求场景下比较难以用于稳定的压力测试和竞态测试。

与 Charles 的对比

我同时对比体验了 Charles 的 Advanced Repeat 功能。

在类似场景下,Charles 对大量重复请求的处理明显更加流畅。例如发送上万次请求时,客户端仍然可以保持正常交互,并不会因为任务规模较大而直接卡死。

因此感觉目前 Reqable 的 Custom Repeat 在大规模请求调度和任务执行模型方面,还有比较大的优化空间。


建议优化方向

1. 大量重发任务不要阻塞 UI

希望 Custom Repeat 在执行大量任务时,不要阻塞主线程/UI线程。

例如以下规模的任务:

5,000
10,000
50,000+

即使任务正在执行,也应该保证 Reqable UI 能够正常响应和操作。


2. 增加可配置的并发数

希望增加类似下面的配置:

重发次数:5000
并发数:20

或者:

重发次数:10000
并发数:100

由用户自行控制同时执行的请求数量。

例如:

重发次数:10000
并发数:50

表示总共执行 10000 次请求,但同时最多保持 50 个请求处于执行状态。

这样既能够避免瞬间创建过多任务导致客户端资源耗尽,也能够满足并发测试需求。


3. 增加执行进度和停止功能

当任务规模较大时,希望可以提供类似这样的状态信息:

进度:3250 / 5000
并发数:50
成功:3231
失败:19

同时提供取消/停止任务的功能。

这样在进行大规模测试时,可以随时终止任务,而不需要等待整个任务执行结束。


4. 优化大量任务的调度和内存占用

如果目前的实现方式是一次性创建大量重复任务,那么在数量较大时可能会产生比较明显的内存和调度压力。

可以考虑采用类似**任务队列 + Worker Pool(工作线程池)**的模型:

                  请求队列
                     │
          ┌──────────┼──────────┐
          ↓          ↓          ↓
        Worker 1   Worker 2   Worker 3 ...
          ↓          ↓          ↓
        Request    Request    Request

通过 Worker 数量控制并发度,而不是一次性创建大量任务。

这样理论上也更容易实现:

  • 并发数控制
  • 任务取消
  • 进度统计
  • 更稳定的内存占用
  • 大规模请求调度

为什么这个功能很重要

我使用 Custom Repeat 的一个主要场景,是进行竞态条件(Race Condition)和并发问题测试。

例如某些 API,需要通过大量并发请求才能比较容易复现问题,例如:

  • 竞态条件(Race Condition)
  • 重复提交
  • 并发更新
  • 数据一致性问题
  • 幂等性问题
  • 锁竞争
  • 限流策略测试
  • 服务端并发处理问题

这种场景下,仅仅进行串行重复请求往往无法达到测试目的。

真正需要的是:

大量请求 + 可控并发数 + 稳定的任务调度

而目前 Reqable 的 Custom Repeat 在大量请求场景下容易出现严重卡顿,因此在这类测试中的实用性会受到比较大的限制。


期望效果

希望未来的 Custom Repeat 可以支持类似:

重发次数:10000
并发数:50
间隔:0 ms

并具备以下能力:

  • 大规模任务执行时 UI 保持流畅;
  • 支持自定义并发数;
  • 支持任务进度统计;
  • 支持取消任务;
  • 控制内存占用;
  • 高效调度大量请求;
  • 更适合压力测试、并发测试和竞态条件测试。

如果能够实现这些能力,我认为 Custom Repeat 的使用场景会比目前丰富很多,也能够更好地满足接口调试之外的并发测试需求。

感谢开发者考虑这个优化建议。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions