# 时延基线
本文记录 `reveal` 的端到端墙钟时延。计时从测试进程启动子进程开始,到 `Command::output()` 返回结束,包含进程启动、路径检查、COM 调用以及等待 Explorer 刷新。
## 测量方法
时延测试默认忽略,因为它会创建和切换 Explorer 标签。确认桌面状态可控后运行:
```powershell
$env:REVEAL_LATENCY_TEST = "1"
cargo test --test latency -- --ignored --nocapture
```
测试分别测量:帮助路径、dry-run 路径、冷启动目录、已打开的可见目录、刚创建条目以及后台标签。结果以中位数和最小/最大值报告。样本数较小,数据用于识别量级和瓶颈,不是性能保证。
## 历史基线
以下数据来自 Windows 11 24H2 build 26100 的一次完整测量;两种绑定形态均执行过。单位为毫秒,括号内为最小值和最大值。
| `--help`,不进入 COM | 18(17–151),n=15 | 18(18–156),n=15 |
| dry-run,包含路径解析和存在性检查 | 17(17–18),n=15 | 18(17–19),n=15 |
| 冷路径,目录未打开 | 934(892–944),n=4 | 957(952–989),n=4 |
| 暖路径,目录可见且条目已列出 | 51(49–67),n=8 | 59(57–76),n=8 |
| 暖路径,条目刚创建 | 544(375–1194),n=3 | 585(414–1070),n=3 |
| 后台标签,`newtab` 策略 | 1140(1079–1268),n=3 | 1280(1106–1496),n=3 |
测试期间 Shell.Windows 中的标签数量会影响结果。两种形态的差异与标签数量、Explorer 状态和系统调度共同相关,不能仅归因于 FFI 绑定来源。
## 结果解释
- 帮助和 dry-run 约 18 ms,说明参数解析、路径归一化和存在性检查不是主要瓶颈。
- 已打开的可见目录通常约 50–60 ms,主要成本是 COM 初始化、Explorer 视图枚举、项目选择和窗口置前。
- 冷路径、刚创建条目和后台标签进入秒级,主要成本是等待 Explorer 创建或刷新视图;代码使用 25 ms 起步、200 ms 封顶的退避轮询。
- `newtab` 在后台标签场景可能产生额外标签;`overwrite` 可以避免增加标签,但会替换当前可见标签内容。
- 条目刚创建时的波动主要来自 Explorer 列表刷新,而不是固定轮询间隔。
## 环境影响
一次测量会创建临时目录并打开多个 Explorer 标签。测试只关闭完全由夹具组成的窗口,不会关闭与用户标签共用的窗口。运行前关闭会主动操作 Explorer 的其他程序,运行后检查并手动关闭遗留夹具标签。
重新测量时应记录 Windows 版本、Explorer 标签数量、绑定 feature、样本数和完整输出,并将新数据标记为新的基线;不要把不同桌面状态下的样本直接比较。