Études de cas
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 le nombre de frames lents ou figés et d'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 fondamental pour optimiser les performances sur Android. Il effectue différentes étapes pour améliorer les performances des applications.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 l'homme, 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 drawables 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 immédiate des performances 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'erreurs ANR signifie une application plus stable et plus fiable, ce qui réduit la frustration des utilisateurs. Le 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 par R8, l'équipe a constaté un changement radical 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 observé des améliorations significatives dans le monde réel, 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 et 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 juste à temps (JIT) des appareils des utilisateurs vers les machines des développeurs. Le code compilé Ahead Of Time (AOT) généré a prouvé qu'il permettait de réduire à la fois 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, permettant 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 a démarré 55% plus rapidement et les utilisateurs ont pu commencer à naviguer 18% plus tôt. L'application optimisée a également montré une réduction des deux tiers des occurrences de compilation Just-In-Time (JIT) et une diminution d'un tiers du temps de compilation JIT. Le rendu des frames s'est 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 puissante pour toute équipe de développement souhaitant avoir un impact significatif et facile sur les performances de son application. 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 présenté 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.
Lire la suite
-
Études de cas
Monzo 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énieurs 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 leur code.
Ben Weiss, Tracy Agyemang • Temps de lecture : 2 min
-
Études de cas
Les régressions de performances sont notoirement difficiles à reproduire, ce qui en fait un énorme goulot d'étranglement pour les développeurs mobiles.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • Temps de lecture : 4 min
-
Études de cas
FotMob a récemment enregistré sa plus forte augmentation du nombre d'utilisateurs Wear OS installés en cinq ans, soit deux à trois fois la moyenne quotidienne. Le secret ? Un flux d'installation multi-appareils simple qui aide les utilisateurs à découvrir leur application Wear OS directement depuis leur téléphone.
Garan Jenkin • Temps de lecture : 3 min
Restez informé
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.