パフォーマンスベンチマーク
Office Oxide は、11 の独立した公開テストスイート — LibreOffice Core、Apache POI、Open XML SDK、ClosedXML、Pandoc、python-docx/python-pptx、Apache Tika、calamine、openpreserve、oletools、LibreOffice legacy コーパス — から取った 6,062 ファイル でベンチマークされています。
方法論: シングルスレッド、LTO 付き release ビルド、ウォームディスクキャッシュ(定常状態)、idle システムでの 3 回の中央値。
DOCX — 2,538 ファイル
| ライブラリ | 言語 | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|---|
| office_oxide | Rust | 0.8 ms | 3.9 ms | 98.9% | MIT |
| python-docx | Python | 11.8 ms | 98 ms | 95.1% | MIT |
Office Oxide は python-docx より平均で 14 倍高速、p99 で 25 倍高速。通過率は 3.8 ポイント高い。
XLSX — 1,802 ファイル
| ライブラリ | 言語 | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|---|
| office_oxide | Rust | 5.0 ms | 40 ms | 97.8% | MIT |
| python-calamine | Rust/Python | 13.9 ms | 183 ms | 96.6% | MIT |
| openpyxl | Python | 94.5 ms | 698 ms | 96.2% | MIT |
Office Oxide は calamine より 2.8 倍高速(次に高速な XLSX ライブラリ)、openpyxl より 18 倍高速。3 つの中で最高の通過率。
PPTX — 806 ファイル
| ライブラリ | 言語 | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|---|
| office_oxide | Rust | 0.7 ms | 3.9 ms | 98.4% | MIT |
| python-pptx | Python | 32.5 ms | 174 ms | 86.7% | MIT |
Office Oxide は python-pptx より 46 倍高速、通過率は 11.7 ポイント高い。python-pptx は予期されたスキーマから外れる PowerPoint ファイルで苦労します。office_oxide はそれらを透過的に処理します。
レガシーフォーマット — 916 ファイル
JVM(Apache Tika)や外部バイナリ(catdoc、antiword)なしで .doc、.xls、そして .ppt を読める他の Rust または Python ライブラリは存在しません。
.doc — 246 ファイル
| ライブラリ | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|
| office_oxide | 0.3 ms | 3.4 ms | 94.7% | MIT |
| catdoc | 4.3 ms | 41 ms | 90.2% | GPL-2.0 |
| antiword | 4.5 ms | 66 ms | 76.8% | GPL-2.0 |
.xls — 494 ファイル
| ライブラリ | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|
| office_oxide | 2.8 ms | 75 ms | 99.2% | MIT |
| xls2csv (catdoc) | 6.9 ms | 58 ms | 84.0% | GPL-2.0 |
| python-calamine | 9.0 ms | 96 ms | 90.7% | MIT |
| xlrd | 36.6 ms | 503 ms | 93.1% | BSD-3 |
xls2csv は p99 が狭い(58 ms 対 75 ms)。複雑なシートで切り詰めた/損失のある出力を出すからです。Office Oxide は平均で 2.4 倍高速で、コーパスを 15 ポイント多く通過します。
.ppt — 176 ファイル
| ライブラリ | 平均 | p99 | 通過率 | ライセンス |
|---|---|---|---|---|
| office_oxide | 0.7 ms | 6.6 ms | 100% | MIT |
| catppt (catdoc) | 2.8 ms | 8 ms | 77.8% | GPL-2.0 |
通過率 — 6,062 ファイル全体で 98.4%
97 件の非通過ファイルはすべて無効な入力です:
| カテゴリ | 件数 | 注 |
|---|---|---|
| 無効な ZIP / CFB アーカイブ | 43 | 切り詰め、EOCD 欠落、CFB マジック不正 |
| 必須パーツの欠落 | 21 | 暗号化、パスワード保護、または stream 欠落 |
| 不正な XML | 18 | XML 爆弾、不正な形式のタグ、ファズ破壊コンテンツ |
| 無効な CFB ヘッダ | 15 | WordPerfect / IBM DisplayWrite / Excel 3/4 を .doc/.xls 偽装、CVE-exploit fixtures |
正規の Word 97+ / Excel 97+ / PowerPoint 97+ ファイルでゼロ失敗。有効なドキュメントでゼロ panic、ゼロタイムアウト、ゼロ false negative。
コーパス
| ソース | ファイル | ライセンス |
|---|---|---|
| LibreOffice Core | 2,185 | MPL-2.0 |
| Apache POI | 1,298 | Apache-2.0 |
| Open XML SDK | 707 | MIT |
| ClosedXML | 371 | MIT |
| Pandoc | 224 | GPL-2.0 |
| python-docx + python-pptx | 111 | MIT |
| Apache Tika | 108 | Apache-2.0 |
| calamine | 28 | MIT |
| openpreserve | 20 | CC0 |
| oletools | 17 | BSD-2 |
| LibreOffice (legacy) | 12 | MPL-2.0 |
| 合計 | 6,062 |
再現可能なベンチマークは bench_rust/ と bench_python.py にあります。完全な方法論とファイルごとの内訳は BENCHMARKS.md を参照。
関連項目
- vs python-docx — DOCX 移行
- vs openpyxl — XLSX 移行
- vs python-pptx — PPTX 移行
- vs Apache Tika — JVM を捨てたいとき