ベンチマーク
ベンチマーク環境
ベンチマークは 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)¶
PythonオーバーヘッドなしのRustレベルで測定:
| 操作 | 時間 |
|---|---|
| パース(小) | 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のベンチマークはデフォルト設定を使用