É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 qui ne répondent pas et l'instabilité peuvent être 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 la puissance de 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 d'images lentes ou figées et d'erreurs 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 l'optimisation des performances sur Android. Il prend différentes mesures pour améliorer les performances des applications.Examinons rapidement les plus efficaces.
- L'élimination du code mort est l'étape la plus importante pour réduire la taille d'une application. Ici, 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 rend l'application plus performante.
- La fusion de 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'humain, 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 donc 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 pouvez vous retrouver avec une classe appelée a. - La réduction des ressources supprime les ressources inutilisées telles que les fichiers XML et les drawables pour réduire davantage la taille de l'application.
Principales étapes de l'optimisation R8
Des données concrètes à 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 des appareils réels avec des utilisateurs réels, 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 images 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 permettent d'obtenir une application plus stable et plus fiable, ce qui réduit la frustration des utilisateurs. Un rendu d'image plus fluide élimine les saccades de l'interface utilisateur, 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 : "Exploiter tout le potentiel de R8 en 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 noté que l'implémentation des modifications pour exploiter tout le potentiel de R8 avait pris moins de deux semaines.
Confirmer les gains : une analyse approfondie avec des macrobenchmarks
Après avoir observé les améliorations significatives dans le monde réel, l'équipe d'ingénieurs de Reddit et l'équipe Android Developer Relations de Google ont effectué des benchmarks détaillés pour confirmer scientifiquement les gains et expérimenter d'autres optimisations. Pour cette analyse, l'équipe d'ingénieurs de Reddit a fourni deux versions de son application : une sans optimisation et une autre qui appliquait 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 réduisait à la fois le temps de démarrage et les problèmes de rendu.
Lorsqu'une application est empaquetée, le dexer d8 prend des classes et des 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 à empaqueter 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, l'équipe a utilisé l'API UIAutomator afin de créer un test qui ouvrait l'application, la faisait défiler trois fois vers le bas, puis la faisait remonter.
Au final, il n'a fallu que cela pour écrire le benchmark :
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}Les données du benchmark ont confirmé les observations sur le terrain et ont 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 juste à temps (JIT) et une diminution d'un tiers du temps de compilation JIT. Le rendu des images s'est amélioré, ce qui a permis de rendre 19 % d'images supplémentaires au cours du parcours utilisateur analysé. Enfin, la taille de l'application a été réduite de plus d'un tiers.
Améliorations globales 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 build 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 de bout en bout holistiques, car les optimisations des performances peuvent entraîner un comportement indésirable, qu'il vaut mieux détecter avant vos utilisateurs.
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 substantielles 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.
Suivez 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 qui souhaite avoir un impact significatif et peu coûteux sur les performances de son application. La corrélation directe entre les améliorations techniques et l'augmentation ultérieure de la satisfaction des utilisateurs souligne la valeur de l'optimisation des performances.
En suivant le modèle présenté dans cette étude de cas (utiliser des outils tels que le score de performances de l'application pour identifier les opportunités, exploiter tout le potentiel d'optimisation de R8, surveiller les données réelles et utiliser des benchmarks pour confirmer et approfondir la compréhension), d'autres développeurs peuvent obtenir des gains similaires.
Pour commencer à utiliser R8 dans votre propre application, consultez la documentation officielle et les conseils 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 qui est en pleine croissance. Au fur et à mesure que l'application évoluait, l'équipe d'ingénieurs a identifié le temps de démarrage de l'application comme un domaine d'amélioration essentiel, mais craignait que cela ne nécessite des modifications importantes de sa base de code.
Ben Weiss • Temps de lecture : 2 min
-
Études de cas
TikTok est une plate-forme mondiale de vidéos courtes connue pour son énorme base d'utilisateurs et ses fonctionnalités innovantes.
Ben Trengrove, Ajesh Pai • Temps de lecture : 2 min
-
Études de cas
Dans le monde dynamique des réseaux sociaux, l'attention des utilisateurs est rapidement gagnée ou perdue. Les applications Meta (Facebook et Instagram) font partie des plus grandes plates-formes sociales au monde et desservent des milliards d'utilisateurs dans le monde entier.
Mayuri Khinvasara Khabya • Temps de lecture : 4 min
Restez informé
Recevez chaque semaine les dernières informations sur le développement Android directement dans votre boîte de réception.