性能基准

目录

测试环境

最新本地测试环境如下:

项目
日期2026-06-11
Node.jsv20.20.2
OS / Archwin32 x64
CPUIntel(R) Core(TM) i7-9700 CPU @ 3.00GHz
Redisredis://127.0.0.1:6379
包版本flex-rate-limit@2.2.4 working tree

这些结果是本机测量值,不是跨机器通用的产品承诺。

当前 Memory 基准

命令:

$env:BENCH_JSON='1'
$env:BENCH_RUNS='5'
$env:BENCH_ITERATIONS='200000'
$env:BENCH_KEYS='1000'
npm run benchmark:memory
算法Median ops/sRange ops/s
fixed-window1,000,695758,579-1,177,554
sliding-window1,488,5181,116,897-1,964,677
token-bucket1,150,445849,225-1,374,173
leaky-bucket1,033,670868,372-1,224,991

Memory OSS 对比

OSS 对比使用历史本地脚本 .devcodex/flex-rate-limit/tmp/oss-rate-limit-bench-20260531/compare-oss.cjs

100,000 次 check / 1,000 keys

实现Median ops/s
flex sliding-window2,137,273
limiter keyed token bucket1,821,318
rate-limiter-flexible memory1,755,547
express-rate-limit memory middleware559,102

200,000 次 check / 5,000 keys

实现Median ops/s
flex sliding-window2,085,832
limiter keyed token bucket1,146,367
rate-limiter-flexible memory865,127
express-rate-limit memory middleware314,179

100,000 次 check / 1 个热点 key

实现Median ops/s
flex sliding-window3,236,078
rate-limiter-flexible memory3,112,453
flex leaky-bucket2,507,171
limiter keyed token bucket2,115,614
express-rate-limit memory middleware544,788

Redis Direct 基准

命令:

$env:BENCH_JSON='1'
$env:BENCH_ITERATIONS='5000'
$env:BENCH_KEYS='500'
$env:BENCH_CONCURRENCY='1,32'
npm run benchmark:redis
Store算法c=1 ops/sc=32 ops/s
RedisStorefixed-window9,69833,458
CacheHubStorefixed-window9,25540,465
RedisStoresliding-window6,84014,684
CacheHubStoresliding-window7,84729,482
RedisStoretoken-bucket6,04715,451
CacheHubStoretoken-bucket9,39044,921
RedisStoreleaky-bucket6,30118,631
CacheHubStoreleaky-bucket8,91146,160
rate-limiter-flexiblefixed-window8,18320,072

HTTP Middleware 基准

命令:

$env:BENCH_JSON='1'
$env:BENCH_DURATION='5'
$env:BENCH_CONNECTIONS='50'
$env:BENCH_KEYS='500'
npm run benchmark:http
场景req/sp50p99
flex-redis3,53113 ms34 ms
flex-cache-hub3,50113 ms27 ms
flex-memory3,15113 ms46 ms
rate-limiter-flexible2,77115 ms52 ms

如何复现

npm run benchmark:memory
npm run benchmark:redis
npm run benchmark:http

设置 BENCH_JSON=1 可输出机器可读 JSON。Redis 不可用时,Redis 相关 benchmark 会给出明确跳过信息并正常退出。

如何解读数据

  • Memory 结果适合评估单进程直接 check() 热路径。
  • Redis Direct 结果适合评估分布式计数的 Redis 与原子后端开销。
  • HTTP 结果适合评估 Express 风格 middleware 链路开销。
  • 不要在 Node.js 版本、CPU、Redis 拓扑、并发数、key 分布和应用自身工作量不同的情况下直接复用这些数字。