Бенчмарки продуктивності
Office Oxide бенчмаркається на 6 062 файлах, узятих із 11 незалежних публічних тестових наборів — LibreOffice Core, Apache POI, Open XML SDK, ClosedXML, Pandoc, python-docx/python-pptx, Apache Tika, calamine, openpreserve, oletools і LibreOffice legacy corpus.
Методика: один потік, release-збірка з LTO, теплий дисковий кеш (steady-state), медіана з трьох прогонів на idle-системі.
DOCX — 2 538 файлів
| Бібліотека | Мова | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|---|
| office_oxide | Rust | 0,8 мс | 3,9 мс | 98,9% | MIT |
| python-docx | Python | 11,8 мс | 98 мс | 95,1% | MIT |
Office Oxide у 14 разів швидший за python-docx у середньому та у 25 разів швидший на хвості (p99). Pass rate вище на 3,8 в.п.
XLSX — 1 802 файли
| Бібліотека | Мова | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|---|
| office_oxide | Rust | 5,0 мс | 40 мс | 97,8% | MIT |
| python-calamine | Rust/Python | 13,9 мс | 183 мс | 96,6% | MIT |
| openpyxl | Python | 94,5 мс | 698 мс | 96,2% | MIT |
Office Oxide у 2,8 раза швидший за calamine (наступна за швидкістю XLSX-бібліотека) та у 18 разів швидший за openpyxl. І найвищий pass rate з трьох.
PPTX — 806 файлів
| Бібліотека | Мова | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|---|
| office_oxide | Rust | 0,7 мс | 3,9 мс | 98,4% | MIT |
| python-pptx | Python | 32,5 мс | 174 мс | 86,7% | MIT |
Office Oxide у 46 разів швидший за python-pptx, pass rate вище на 11,7 в.п. python-pptx має проблеми з PowerPoint-файлами, що відхиляються від очікуваної схеми; office_oxide обробляє їх прозоро.
Legacy-формати — 916 файлів
Жодна інша Rust- чи Python-бібліотека не читає .doc, .xls і .ppt без JVM (Apache Tika) або зовнішніх бінарників (catdoc, antiword).
.doc — 246 файлів
| Бібліотека | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|
| office_oxide | 0,3 мс | 3,4 мс | 94,7% | MIT |
| catdoc | 4,3 мс | 41 мс | 90,2% | GPL-2.0 |
| antiword | 4,5 мс | 66 мс | 76,8% | GPL-2.0 |
.xls — 494 файли
| Бібліотека | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|
| office_oxide | 2,8 мс | 75 мс | 99,2% | MIT |
| xls2csv (catdoc) | 6,9 мс | 58 мс | 84,0% | GPL-2.0 |
| python-calamine | 9,0 мс | 96 мс | 90,7% | MIT |
| xlrd | 36,6 мс | 503 мс | 93,1% | BSD-3 |
У xls2csv щільніший p99 (58 мс проти 75 мс), бо він віддає урізаний/lossy-вивід на складних листах. Office Oxide у 2,4 раза швидший за середнім і пропускає на 15 в.п. більше корпусу.
.ppt — 176 файлів
| Бібліотека | Середнє | p99 | Pass rate | Ліцензія |
|---|---|---|---|---|
| office_oxide | 0,7 мс | 6,6 мс | 100% | MIT |
| catppt (catdoc) | 2,8 мс | 8 мс | 77,8% | GPL-2.0 |
Pass rate — 98,4% на 6 062 файлах
97 непройдених файлів — усі невалідні входи:
| Категорія | Кількість | Примітки |
|---|---|---|
| Невалідний ZIP / CFB-архів | 43 | Усічення, відсутній EOCD, поганий CFB magic |
| Відсутня обов’язкова частина | 21 | Зашифровано, під паролем або немає stream |
| Зламаний XML | 18 | XML-бомби, ill-formed-теги, fuzz-корумпований контент |
| Невалідний 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