# 基准测试 这个插件的两条路径在确定性 fixture 上到底省多少,以及这些数字**不**能证明什么。 ## 怎么复现 ```sh node scripts/benchmark.mjs # 输出 Markdown 表格 node scripts/benchmark.mjs --json # 输出原始数据 ``` 脚本会建一个临时 fixture 仓库(40 个提交、脏工作区、一次 200 行改动、2 000 行测试日志、5 000 行应用日志、300 个包的 lockfile),每个用例跑两遍——一遍原样、一遍走插件实际使用的那条代码路径——然后打印下表。它不碰你的仓库:fixture 在系统临时目录里,跑完删除。 ## 本次运行的环境 | 项 | 值 | |---|---| | 系统 | Windows 11 | | rtk | `1.1.0` | | 插件 | `1.0.0` | | Node | 24.22 | | pipeline | 插件自管(`rtk:posthook`),经 `RTK_CONFIG_DIR` 注入 | ## 结果 | 用例 | 路径 | 之前 | 之后 | 降幅 | 估算 token 之前 → 之后 | |---|---|---:|---:|---:|---:| | `git status` | 改写 | 377 B | 47 B | −87.5 % | 95 → 12 | | `git log -n 20` | 改写 | 3 578 B | 1 699 B | −52.5 % | 895 → 425 | | `git diff` | 改写 | 20 511 B | 6 945 B | −66.1 % | 5 128 → 1 737 | | `ls -la` | 改写 | — | — | 跳过 | — | | `grep -rn TODO src` | 改写 | — | — | 跳过 | — | | pytest 输出 2 001 行 | 压缩 | 89 505 B | 11 287 B | −87.4 % | 22 377 → 2 822 | | 应用日志 5 000 行 | 压缩 | 272 640 B | 13 633 B | −95.0 % | 68 160 → 3 409 | | `package-lock.json`(read 形状) | 压缩 | 76 896 B | 4 654 B | −93.9 % | 19 224 → 1 164 | | **合计** | | **463 507 B** | **38 265 B** | **−91.7 %** | **115 879 → 9 569** | 两个 `跳过` 行是 Windows 没有的 POSIX 命令:`rtk ls` 会去 spawn `ls`,rtk 报 `program not found`。跳过会显式出现在表里而不是让整次运行失败——偷偷丢用例的基准比明说跳过的基准更糟。 ## token 一列的含义 token 由插件自己用的函数估算(`src/tokens.ts`):ASCII 稠密文本按 4 字符 1 token,汉字与全角形式按每字符 0.6 token,向上取整。 **它不是分词器。** 服务商的计算方式不同,CJK 或代码密集的文本差异最大。`tests/tokens.test.ts` 在构造样本上钉住公式,`tests/benchmark-tokens.test.ts` 保证本脚本里的副本与插件一致;两者都无法离线验证对真实分词器的准确度。 ## 这个基准不是什么 - **不是模型请求的计费测量。** 它数的是工具输出的字节与估算 token,不是一次真实请求的账单。系统提示、对话历史、缓存前缀与模型自身输出都不在范围内。 - **不是与其他插件的横评。** `dsh-token-saver` / `billion-context` 的同装组合处在不同层(结果后处理、对话折叠),在这里比较会把两套测量混在一起。 - **不是分布。** 每个用例只有一次确定性运行。真实负载会浮动;这张表应当读作“该机制在这类输出上的上限”,而不是“每次会话的预期收益”。 - **跨平台的跳过行不可复现。** Linux 与 macOS 上那两个改写用例会真的跑;Windows 上按上表标为跳过。 想衡量自己的工作负载,对比运行前后的 `/rtk stats`,或读插件持久化的累计数字:`/rtk-workbench/stats.json`。