Introduction
En tant que membre de l'équipe Rustdoc, j'ai récemment réalisé une série de pull requests (PRs) qui ont permis d'améliorer significativement les performances de Rustdoc, avec une réduction moyenne du temps de traitement de 25% et allant jusqu'à 40% pour certaines bibliothèques comme hyper et bitmaps. Dans cet article, je vais partager comment j'ai découvert et mis en œuvre ces améliorations.
Le bug initial
Tout a commencé avec un bug étrange signalé par @theemathas de l'équipe de publication Rust. Lors des tests de la nouvelle version bêta avec l'outil Crater, un problème a été détecté sur une bibliothèque appelée indented-blocks. Rustdoc échouait avec une erreur de "nombre maximal de trames de pile atteint", alors que Rustc parvenait à compiler le code.
Analyse et diagnostic
Rustdoc utilise souvent les APIs de Rustc pour organiser et présenter des informations. J'ai découvert que Rustdoc tentait d'inclure de la documentation pour un trait interne à core::fmt, ce qui n'était pas nécessaire pour une bibliothèque quasiment vide. En examinant les logs, il est apparu que Rustdoc essayait d'inliner de la documentation inutilement.
Optimisation et implémentation
Pour résoudre ce problème, j'ai commencé par optimiser la manière dont Rustdoc gère l'inlining des traits. En restreignant cette fonctionnalité aux éléments nécessaires, nous avons pu réduire considérablement le temps de traitement. J'ai également apporté des modifications pour améliorer le cache, ce qui a permis d'accélérer encore plus le processus.
Résultats
Après ces améliorations, Rustdoc a montré une réduction de 33% du temps de traitement en moyenne, atteignant même 60% sur certains microbenchmarks tels que helloworld. Ces améliorations ont non seulement corrigé le bug initial mais ont aussi offert une meilleure expérience aux utilisateurs de Rustdoc.
Conclusion
Cette expérience a été une leçon sur l'importance d'une analyse approfondie des bugs et de la manière dont une approche méthodique peut conduire à des améliorations significatives. Si tu es intéressé par l'optimisation de tes outils tech, discutons de ton projet en 15 minutes.
Sources
- [Rustdoc Documentation](https://doc.rust-lang.org/rustdoc/)
- [Blog de Noah Lev Bartell-Mangel](https://noahlev.org/blog/2026/08/27/making-rustdoc-faster/)
Discuss your project
Let's discuss your project in 15 minutes.