Performance-Benchmarks
Office Oxide wird auf 6.062 Dateien aus 11 unabhängigen öffentlichen Test-Suites gebenchmarkt — LibreOffice Core, Apache POI, Open XML SDK, ClosedXML, Pandoc, python-docx/python-pptx, Apache Tika, calamine, openpreserve, oletools und LibreOffice-Legacy-Korpus.
Methodik: Single-Thread, Release-Build mit LTO, warmer Disk-Cache (Steady State), Median aus drei Läufen auf einem unbeschäftigten System.
DOCX — 2.538 Dateien
| Library | Sprache | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|---|
| 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 ist im Mittel 14× schneller als python-docx und am Tail (p99) 25× schneller. Pass-Rate liegt 3,8 Prozentpunkte höher.
XLSX — 1.802 Dateien
| Library | Sprache | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|---|
| 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 ist 2,8× schneller als calamine (die nächstschnellste XLSX-Library) und 18× schneller als openpyxl. Auch die höchste Pass-Rate der drei.
PPTX — 806 Dateien
| Library | Sprache | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|---|
| 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 ist 46× schneller als python-pptx, Pass-Rate 11,7 Prozentpunkte höher. python-pptx straucheln bei PowerPoint-Dateien, die vom erwarteten Schema abweichen; office_oxide handhabt sie transparent.
Legacy-Formate — 916 Dateien
Keine andere Rust- oder Python-Library liest .doc, .xls und .ppt ohne JVM (Apache Tika) oder externe Binaries (catdoc, antiword).
.doc — 246 Dateien
| Library | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|
| 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 Dateien
| Library | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|
| 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 hat einen engeren p99 (58 ms vs 75 ms), weil es bei komplexen Sheets abgeschnittenen / verlustbehafteten Output liefert. Office Oxide ist im Mittel 2,4× schneller und besteht 15 Prozentpunkte mehr des Korpus.
.ppt — 176 Dateien
| Library | Mittelwert | p99 | Pass-Rate | Lizenz |
|---|---|---|---|---|
| office_oxide | 0,7 ms | 6,6 ms | 100 % | MIT |
| catppt (catdoc) | 2,8 ms | 8 ms | 77,8 % | GPL-2.0 |
Pass-Rate — 98,4 % über 6.062 Dateien
Die 97 nicht bestandenen Dateien sind allesamt invalide Inputs:
| Kategorie | Anzahl | Anmerkungen |
|---|---|---|
| Ungültiges ZIP / CFB-Archiv | 43 | Abgeschnitten, kein EOCD, schlechtes CFB-Magic |
| Pflicht-Teil fehlt | 21 | Verschlüsselt, passwortgeschützt oder Stream fehlt |
| Malformed XML | 18 | XML-Bombs, ill-formed Tags, fuzz-korrupter Content |
| Ungültiger CFB-Header | 15 | WordPerfect / IBM DisplayWrite / Excel 3/4, falsch als .doc/.xls benannt, CVE-Exploit-Fixtures |
Null Fails bei legitimen Word 97+ / Excel 97+ / PowerPoint 97+ Dateien. Null Panics, null Timeouts, null False Negatives bei validen Dokumenten.
Korpus
| Quelle | Dateien | Lizenz |
|---|---|---|
| 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 |
| Gesamt | 6.062 |
Reproduzierbare Benchmarks unter bench_rust/ und bench_python.py. Vollständige Methodik und per-Datei-Aufschlüsselung in BENCHMARKS.md.
Siehe auch
- vs python-docx — DOCX-Migration
- vs openpyxl — XLSX-Migration
- vs python-pptx — PPTX-Migration
- vs Apache Tika — wenn du die JVM loswerden willst