Partage d’expérience sur l’amélioration des performances de serde_json
- Introduction
- Un récent travail d’optimisation a permis d’améliorer de 20 % la vitesse de traitement des chaînes dans serde_json.
- Utilisation de serde, le framework de sérialisation et de désérialisation de Rust, ainsi que de serde_json pour le traitement de JSON.
- Ces améliorations de performances peuvent bénéficier à l’ensemble de l’écosystème.
Point de départ
- Travail sur la bibliothèque #[iex]
- Utilisation de serde et serde_json pour les benchmarks de performance.
- Découverte de choix discutables dans du code critique pour les performances.
- Le chemin d’erreur était plus de deux fois plus lent que le chemin de succès.
Résolution du problème
- Optimisation du chemin d’erreur
- La fonction
position_of_index provoquait un goulot d’étranglement.
- Utilisation du crate
memchr pour optimiser la recherche dans les chaînes.
- Résultat : amélioration de la vitesse sur le chemin d’erreur.
Optimisations supplémentaires
- Optimisation du parsing des chaînes
- Tentative infructueuse d’utiliser la fonction
memchr2.
- Utilisation de la technique SWAR (SIMD dans les registres) pour optimiser la recherche de caractères de contrôle.
- Résolution du problème de baisse de performances sur les chaînes courtes.
Traitement Unicode
- Optimisation du parsing Unicode
- Amélioration des performances du décodage hexadécimal.
- Mise en place d’un décodage efficace à l’aide de la table
HEX.
- Résultat : parsing de War and Peace encodé en JSON accéléré de 21 %.
Résultat final
- Optimisation de l’encodage UTF-8
- Implémentation directe de l’encodage UTF-8 à la place de la fonction
char::encode_utf8.
- Résultat : nouvelle amélioration de 9 % de la vitesse de parsing de War and Peace.
Résumé de GN⁺
- Cet article partage une expérience d’amélioration de 20 % des performances de serde_json, largement utilisé dans l’écosystème Rust.
- Le processus d’optimisation couvre diverses techniques et méthodes de résolution de problèmes.
- Les optimisations du parsing Unicode et des chaînes améliorent fortement les performances du traitement JSON.
- Cet article sera utile aux développeurs intéressés par l’optimisation des performances et aura un impact positif sur l’ensemble de l’écosystème Rust.
Aucun commentaire pour le moment.