BENCHMARK

August 24, 2026 · View on GitHub

  • 生成方式:pnpm --filter dsh-webstack bench(离线确定性 fixture,seed=20260824; node 直接运行,不进 vitest/check 链)。
  • 运行环境:node v24.19.0 · win32 x64 · AMD Ryzen 7 9800X3D 8-Core Processor
  • 口径:最近邻秩百分位;搜索场景经 WebstackAggregator.search/searchHits 全管线(hints→分档→计划→凭据快照→指纹→缓存→fallback/融合→seam 映射), 每次场景前有 20 次预热不计样本;数据集逐字节可复现,计时为当次机器实测。

结果

场景np50p95meanmax
L0 缓存命中(search 全管线同键重放)3000.008 ms0.015 ms0.010 ms0.237 ms
免费池单引擎直出(free×1,miss 热路径)1000.011 ms0.024 ms0.015 ms0.225 ms
双引擎 RRF 融合(free×2)1000.057 ms0.124 ms0.063 ms0.384 ms
fetchPipeline T1(静态抓取+抽取)1000.110 ms0.275 ms0.144 ms0.388 ms

缓存键指纹微基准:20,000 次 keyFor (canonical JSON → sha256,双引擎维度输入)平均 2518 ns/op ≈ 0.4 M ops/s (参考键 8bd9579875c039e8…)。指纹成本相对网络预算可忽略, 不设达标线(信息项)。

预算对照

预算项阈值实测判定
L0 缓存命中(全管线)<50 msmax 0.237 ms(n=300)达标 ✓
免费池单引擎直出(热路径)≤1.5 sp95 0.024 ms达标 ✓
双引擎融合≤8 sp95 0.124 ms达标 ✓
抓取 T1(静态管线)≤5 sp95 0.275 ms达标 ✓

结论:全部场景达预算。

方法说明

  • 假 outboundbench/outbound-mock.loader.mjsmodule.registersrc/safety/outbound.ts 替换为内存即回合的替身(~22 KB 确定性 HTML), fetchPipeline T1 腿零网络完成;搜索腿用脚本化假引擎(BaseEngine 包装, attempts/provenance 语义与真实适配器一致),同样零网络。
  • 确定性:查询词、命中 URL、页面内容全部由 mulberry32(20260824) 派生; 单引擎/融合场景每循环换查询键以强制缓存 miss(测的是 miss 热路径), 缓存命中场景则固定同键重放。
  • 与 check 铁律的关系:本目录不在 tsc/vitest/biome/tsdown 扫描范围内, 基准代码的改动不影响 pnpm -r run check && pnpm lint