基准测试
基准测试¶
基准测试环境
以下基准测试通过 CodSpeed CI(pytest-codspeed,WallTime 模式)测得,绝对时间可能因硬件而异,但相对加速比在不同硬件上保持一致。
pyrs-yaml 的性能基准测试,通过 CodSpeed CI(pytest-codspeed,WallTime 模式)测量。
方法论¶
- 工具: divan(Rust)+
pytest-codspeed(Python) - 轮次: WallTime 模式,自适应采样(Python),100+ 次采样(Rust)
- 指标: 中位数时间(Python,毫秒),平均时间(Rust,微秒)
解析性能¶
| YAML 大小 | pyrs-yaml | PyYAML | ruamel.yaml | 相比 PyYAML 加速 |
|---|---|---|---|---|
| 小 (~100 B) | 0.18 ms | 3.8 ms | 8.8 ms | 21× |
| 中 (~500 B) | 0.56 ms | 24.2 ms | 56.1 ms | 43× |
| 大 (~2 KB) | 1.5 ms | 57.7 ms | 127.9 ms | 38× |
序列化性能¶
| YAML 大小 | pyrs-yaml | PyYAML | ruamel.yaml | 相比 PyYAML 加速 |
|---|---|---|---|---|
| 小 (~100 B) | 0.04 ms | 2.2 ms | 4.9 ms | 55× |
| 中 (~500 B) | 0.08 ms | 12.6 ms | 28.1 ms | 159× |
| 大 (~2 KB) | 0.17 ms | 30.2 ms | 63.1 ms | 177× |
往返性能¶
| YAML 大小 | pyrs-yaml | PyYAML | ruamel.yaml | 相比 PyYAML 加速 |
|---|---|---|---|---|
| 小 (~100 B) | 0.22 ms | 6.0 ms1 | 13.7 ms1 | 28× |
| 中 (~500 B) | 0.63 ms | 36.8 ms1 | 84.2 ms1 | 59× |
| 大 (~2 KB) | 1.6 ms | 87.9 ms1 | 191.0 ms1 | 55× |
Rust 侧基准测试(divan)¶
在 Rust 层面测量(无 Python 开销):
| 操作 | 时间 |
|---|---|
| 解析(小) | 85.6 µs |
| 解析(中) | 277.4 µs |
| 解析(大) | 840.6 µs |
| 解析(含锚点) | 254.3 µs |
| 解析(含注释) | 164.9 µs |
| 解析(块标量) | 123.8 µs |
| 序列化(小) | 7.9 µs |
| 序列化(中) | 32.2 µs |
| 序列化(大) | 76.1 µs |
| 序列化(含锚点) | 27.0 µs |
| 序列化(块标量) | 15.4 µs |
| 往返(小) | 91.7 µs |
| 往返(中) | 303.1 µs |
| 往返(大) | 910.0 µs |
要点总结¶
- pyrs-yaml 解析比 PyYAML 快 21–43 倍、序列化快 55–177 倍
- pyrs-yaml 解析比 ruamel.yaml 快 48–100 倍、序列化快 123–371 倍,同时提供相同的往返特性
- Rust 侧解析极快 — 小文档解析仅需约 86 µs
- 序列化在所有尺寸下均快速 — 小文档序列化仅需约 8 µs
- 速度优势在所有文档尺寸下均保持
说明¶
- 基准测试通过 CodSpeed CI 测量;绝对时间可能因硬件而异
- 相对加速比(×N)在不同硬件上保持一致
- PyYAML 基准测试使用
safe_load/safe_dump(相同安全保证) - ruamel.yaml 基准测试使用默认设置