Comment Reddit a utilisé l'optimiseur R8 pour améliorer considérablement ses performances
Temps de lecture : 4 min
Dans le monde actuel des applications mobiles, une expérience utilisateur fluide n'est pas qu'une fonctionnalité, c'est une nécessité. Les temps de chargement lents, les interfaces non réactives et l'instabilité peuvent constituer des obstacles importants à l'engagement et à la fidélisation des utilisateurs. Lors de sa collaboration avec l'équipe Android Developer Relations, l'équipe d'ingénieurs de Reddit a utilisé le score de performances de l'application pour évaluer son application. Après avoir évalué ses performances, elle a identifié un potentiel d'amélioration important et a décidé de prendre les mesures nécessaires pour exploiter pleinement R8, l'optimiseur d'applications Android. Cette initiative ciblée a permis d'améliorer considérablement les temps de démarrage, de réduire les frames lents ou figés et les ANR, et d'augmenter globalement les notes sur le Play Store. Cette étude de cas explique comment Reddit a obtenu ces résultats impressionnants.
Comment l'optimiseur R8 a aidé Reddit
L'optimiseur R8 est un outil essentiel pour optimiser les performances sur Android. Plusieurs étapes sont nécessaires pour améliorer les performances d'une application.Examinons rapidement les plus importantes.
- Le tree shaking est l'étape la plus importante pour réduire la taille d'une application. Le code inutilisé des dépendances de l'application et de l'application elle-même est supprimé.
- L'intégration de méthodes remplace les appels de méthode par le code réel, ce qui améliore les performances de l'application.
- La fusion des classes et d'autres stratégies sont appliquées pour rendre le code plus compact. À ce stade, il ne s'agit plus de la lisibilité du code source par les humains, mais de faire en sorte que le code compilé fonctionne rapidement. Les abstractions, telles que les interfaces ou les hiérarchies de classes, n'ont pas d'importance ici et seront supprimées.
- La minification des identifiants remplace les noms des classes, des champs et des méthodes par des noms plus courts et sans signification. Ainsi, au lieu de
MyDataModel, vous pourriez obtenir une classe appelée "a". - La réduction des ressources supprime les ressources inutilisées telles que les fichiers XML et les éléments graphiques pour réduire davantage la taille de l'application.
Principales étapes de l'optimisation R8
Des données brutes à la satisfaction des utilisateurs : identifier le succès en production
Reddit a constaté une amélioration des performances immédiatement après le déploiement d'une nouvelle version de l'application auprès des utilisateurs. En utilisant Android Vitals et Crashlytics, Reddit a pu capturer des métriques de performances sur de vrais appareils avec de vrais utilisateurs, ce qui lui a permis de comparer la nouvelle version aux versions précédentes.
Comment R8 a amélioré les performances de l'application Reddit
L'équipe a observé un démarrage à froid 40% plus rapide, une réduction de 30% des erreurs "L'application ne répond pas" (ANR), une amélioration de 25% du rendu des frames et une réduction de 14% de la taille de l'application.
Ces améliorations sont essentielles pour la satisfaction des utilisateurs. Un démarrage plus rapide signifie moins d'attente et un accès plus rapide au contenu. Moins d'ANR signifie une application plus stable et plus fiable, ce qui réduit la frustration des utilisateurs. Un rendu des frames plus fluide élimine les saccades de l'UI, ce qui rend le défilement et les animations fluides et réactifs. Cet impact technique positif était également clairement visible dans le sentiment des utilisateurs.
Les indicateurs de satisfaction des utilisateurs concernant le succès de l'optimisation étaient directement visibles sur le Google Play Store. Après le déploiement de la version optimisée pour R8, l'équipe a constaté un changement spectaculaire et positif dans le sentiment et l'engagement des utilisateurs.
Drew Heavner : "Outil permettant d'exploiter tout le potentiel de R8 dans moins de deux semaines"
Plus impressionnant encore, cela a été accompli grâce à un effort ciblé. Drew Heavner, ingénieur logiciel chez Reddit qui a travaillé sur cette initiative, a indiqué que l'implémentation des modifications pour exploiter tout le potentiel de R8 avait pris moins de deux semaines.
Confirmer les gains : analyse approfondie avec les macrobenchmarks
Après avoir constaté des améliorations concrètes significatives, l'équipe d'ingénierie de Reddit et l'équipe Android Developer Relations de Google ont effectué des benchmarks détaillés pour confirmer scientifiquement les gains et tester d'autres optimisations. Pour cette analyse, l'équipe d'ingénierie de Reddit a fourni deux versions de son application : l'une sans optimisations et l'autre appliquant R8, ainsi que deux autres outils d'optimisation des performances fondamentaux : Profils de référence et Profils de démarrage.
Les profils de référence déplacent efficacement les étapes de compilation Just in Time (JIT) des appareils des utilisateurs vers les machines des développeurs. Il a été prouvé que le code compilé Ahead Of Time (AOT) généré permet de réduire le temps de démarrage et les problèmes de rendu.
Lorsqu'une application est empaquetée, le dexer d8 prend les classes et les méthodes, puis construit les fichiers classes.dex de votre application. Lorsqu'un utilisateur ouvre l'application, ces fichiers DEX sont chargés les uns après les autres jusqu'à ce que l'application puisse démarrer. En fournissant un profil de démarrage, vous indiquez à d8 les classes et les méthodes à inclure dans les premiers fichiers classes.dex. Cette structure permet à l'application de charger moins de fichiers, ce qui améliore la vitesse de démarrage.
Jetpack Macrobenchmark était l'outil principal de cette phase, car il permettait de mesurer précisément les interactions utilisateur dans un environnement contrôlé. Pour simuler un parcours utilisateur typique, ils ont utilisé l'API UIAutomator pour créer un test qui ouvrait l'application, faisait défiler l'écran vers le bas trois fois, puis le faisait défiler vers le haut.
Pour écrire le benchmark, il suffisait de faire ceci :
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}Les données de référence ont confirmé les observations sur le terrain et fourni des insights plus approfondis. L'application entièrement optimisée démarrait 55% plus rapidement et les utilisateurs pouvaient commencer à naviguer 18% plus tôt. L'application optimisée a également montré une réduction des deux tiers des occurrences de compilation juste à temps (JIT) et une diminution d'un tiers du temps de compilation JIT. Le rendu des frames a été amélioré, ce qui a permis de rendre 19% de frames en plus au cours du parcours utilisateur de référence. Enfin, la taille de l'application a été réduite de plus d'un tiers.
Améliorations générales des performances de Reddit
Vous pouvez mesurer le temps de compilation JIT avec une métrique de section de trace Macrobenchmark personnalisée comme celle-ci :
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Activer la technologie à l'origine de la transformation : R8
Pour activer R8 en mode complet, configurez votre fichier app/build.gradle.kts en définissant minifyEnabled et shrinkResources sur true dans le type de compilation de version.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}Cette étape doit être suivie de tests complets de bout en bout, car les optimisations des performances peuvent entraîner des comportements indésirables, qu'il est préférable de détecter avant que vos utilisateurs ne le fassent.
Comme indiqué précédemment dans cet article, R8 effectue des optimisations importantes afin de maximiser les avantages en termes de performances. R8 apporte des modifications importantes au code, y compris en renommant, en déplaçant et en supprimant des classes, des champs et des méthodes. Si vous constatez que ces modifications entraînent des erreurs, vous devez spécifier les parties du code que R8 ne doit pas modifier en les déclarant dans des règles de conservation.
Suivre l'exemple de Reddit dans votre application
Le succès de Reddit avec R8 constitue une étude de cas intéressante pour toute équipe de développement souhaitant améliorer considérablement les performances de son application sans trop d'efforts. La corrélation directe entre les améliorations techniques et l'augmentation de la satisfaction des utilisateurs souligne l'importance de l'optimisation des performances.
En suivant le plan décrit dans cette étude de cas (en utilisant des outils tels que le score de performances de l'application pour identifier les opportunités, en exploitant tout le potentiel d'optimisation de R8, en surveillant les données réelles et en utilisant des benchmarks pour confirmer et approfondir la compréhension), d'autres développeurs peuvent obtenir des résultats similaires.
Pour commencer à utiliser R8 dans votre propre application, consultez la documentation et les conseils officiels récemment mis à jour sur l'activation, la configuration et le dépannage de l'optimiseur R8.
-
Études de casMonzo est une banque numérique britannique qui compte 15 millions de clients et dont le nombre ne cesse d'augmenter. À mesure que l'application évoluait, l'équipe d'ingénierie a identifié le temps de démarrage de l'application comme un point critique à améliorer, mais craignait que cela ne nécessite des modifications importantes de sa base de code.
Ben Weiss, Tracy Agyemang • Temps de lecture : 2 min -
Études de casL'équipe a créé un code de base d'UI natif de l'IA, 50% plus petit que l'implémentation d'origine. Elle a également réduit de 35% le temps d'exécution de l'agent d'IA, de 32% le nombre d'échanges entre l'ingénieur et l'agent, et de 33% le coût en jetons.
Pavlo Stavytskyi, Rebecca Franks • Temps de lecture : 11 min -
Études de casWhatsApp est la plus grande plate-forme de messagerie au monde, avec des milliards d'utilisateurs dans le monde entier. Il s'agit de l'outil de communication par défaut pour les utilisateurs de différentes régions, qui leur permet de communiquer de manière privée, fiable et sécurisée.
Niharika Arora, Tracy Agyemang, Mayank Jain • Temps de lecture : 8 min
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.