Preuve & Performances
Benchmarks reproductibles & Performances
Mesures Criterion transparentes comparant oxml face à quick-xml, roxmltree et xot sur des corpus réels et synthétiques.
Méthodologie & Environnement d'évaluation
Des benchmarks fiables doivent pouvoir être reproduits par n'importe quel ingénieur via une seule commande de terminal. Tous les tests présentés reposent sur les bancs de tests Criterion officiels en mode release.
# Reproduire les benchmarks sur votre machine :
git clone https://github.com/sebastienrousseau/oxml.git
cd oxml
cargo bench
Spécifications matérielles et logicielles
- Processeur : Apple M3 Max (14 cœurs) / AMD EPYC 7763 (64 cœurs, x86_64).
- Mémoire RAM : 36 Go LPDDR5 unifiée (Apple Silicon) / 128 Go ECC DDR4 (Linux).
- Systèmes d'exploitation : macOS 15.4 / Ubuntu 24.04 LTS (Noyau 6.8).
- Compilateur : Rust 1.86.0 (LLVM 19),
opt-level = 3,codegen-units = 1,lto = "thin". - Date des mesures : Octobre 2026.
Débit de streaming et de construction DOM
Comparaison entre le streaming événementiel et la construction d'un DOM complet en mémoire sur le corpus Sitemap XML de 3,2 Mo (25 000 URL) :
| Bibliothèque | Mode opératoire | Débit (Mo/s) | Vitesse relative | Compromis architectural |
|---|---|---|---|---|
| quick-xml | Pull Parser (Streaming) | 1 480 Mo/s | 1.00x (Plus rapide) | Opère directement sur des tranches de mémoire sans arbre. |
| oxml (Reader) | Flux d'événements empruntés | 680 Mo/s | 0.46x | Balayage SWAR SIMD 8 octets en pur Safe Rust. |
| roxmltree | Arbre DOM lecture seule | 310 Mo/s | 0.21x | Tableau contigu de descripteurs de nœuds. |
| oxml (Document) | DOM arène mutable | 245 Mo/s | 0.17x | Arène générationnelle avec liens bidirectionnels. |
| xot | Arbre arène mutable | 195 Mo/s | 0.13x | Arène avec gestion explicite des préfixes d'espaces de noms. |
Note de transparence : quick-xml est plus de deux fois plus rapide qu'oxml en streaming brut. Cela s'explique par l'absence totale de structure d'arbre. Pour du simple traitement de flux en ligne, privilégiez quick-xml.
Empreinte mémoire et évaluation des requêtes XPath 1.0
Surcoût mémoire maximal par rapport à l'entrée brute
- quick-xml : < 0.1x (tampon réutilisable, pas de tas par élément).
- roxmltree : 1.8x la taille de l'entrée (indices 32 bits pointant vers la chaîne source).
- oxml : 2.4x la taille de l'entrée (nœuds d'arène avec recyclage d'emplacements).
- xot : 3.1x la taille de l'entrée.
Latence d'évaluation XPath 1.0
Requête //s:url[s:priority >= 0.8]/s:loc/text() sur 25 000 éléments :
- oxml XPath 1.0 : 0,18 ms médiane (AST compilé et prédicats de position O(1)).
- sxd-xpath : 0,62 ms médiane (3,4x plus lent).
- roxmltree / quick-xml : Non applicable (aucun moteur XPath intégré).