Benchmarks de rendimiento
Office Oxide se benchmarca sobre 6.062 archivos sacados de 11 conjuntos de test públicos independientes — LibreOffice Core, Apache POI, Open XML SDK, ClosedXML, Pandoc, python-docx/python-pptx, Apache Tika, calamine, openpreserve, oletools y el corpus heredado de LibreOffice.
Metodología: single-thread, build de release con LTO, caché de disco templada (steady-state), mediana de tres ejecuciones en un sistema ocioso.
DOCX — 2.538 archivos
| Librería | Lenguaje | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|---|
| 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 es 14× más rápido que python-docx en la media y 25× más rápido en la cola (p99). Tasa de éxito 3,8 puntos porcentuales más alta.
XLSX — 1.802 archivos
| Librería | Lenguaje | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|---|
| 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 es 2,8× más rápido que calamine (la siguiente librería XLSX más rápida) y 18× más rápido que openpyxl. También con la mayor tasa de éxito de los tres.
PPTX — 806 archivos
| Librería | Lenguaje | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|---|
| 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 es 46× más rápido que python-pptx, con tasa de éxito 11,7 puntos porcentuales mayor. python-pptx tropieza con archivos PowerPoint que se desvían de su schema esperado; office_oxide los gestiona de forma transparente.
Formatos heredados — 916 archivos
Ninguna otra librería en Rust o Python lee .doc, .xls y .ppt sin JVM (Apache Tika) o binarios externos (catdoc, antiword).
.doc — 246 archivos
| Librería | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|
| 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 archivos
| Librería | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|
| 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 tiene un p99 más ajustado (58 ms vs 75 ms) porque emite salida truncada/con pérdida en hojas complejas. Office Oxide es 2,4× más rápido en la media y pasa 15 puntos porcentuales más del corpus.
.ppt — 176 archivos
| Librería | Media | p99 | Tasa de éxito | Licencia |
|---|---|---|---|---|
| office_oxide | 0,7 ms | 6,6 ms | 100% | MIT |
| catppt (catdoc) | 2,8 ms | 8 ms | 77,8% | GPL-2.0 |
Tasa de éxito — 98,4% sobre 6.062 archivos
Los 97 archivos no superados son todos entradas inválidas:
| Categoría | Cantidad | Notas |
|---|---|---|
| ZIP / CFB inválido | 43 | Truncados, sin EOCD, magic CFB malo |
| Falta parte obligatoria | 21 | Cifrados, con contraseña o sin stream |
| XML malformado | 18 | XML bombs, etiquetas ill-formed, contenido corrompido por fuzz |
| Header CFB inválido | 15 | WordPerfect / IBM DisplayWrite / Excel 3/4 mal nombrados como .doc/.xls, fixtures de CVE |
Cero fallos en archivos legítimos Word 97+ / Excel 97+ / PowerPoint 97+. Cero panics, cero timeouts, cero falsos negativos en documentos válidos.
Corpus
| Fuente | Archivos | Licencia |
|---|---|---|
| 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 (heredado) | 12 | MPL-2.0 |
| Total | 6.062 |
Benchmarks reproducibles en bench_rust/ y bench_python.py. Metodología completa y desglose por archivo en BENCHMARKS.md.
Véase también
- vs python-docx — migración DOCX
- vs openpyxl — migración XLSX
- vs python-pptx — migración PPTX
- vs Apache Tika — cuando quieres deshacerte de la JVM