Optimisation du temps de démarrage grâce aux profils de base

  • Les profils de base éliminent la dépendance à la compilation JIT lors de la première version utilisant AOT.
  • Elles permettent de précompiler les chemins de code critiques afin de réduire le temps de démarrage et d'améliorer la fluidité du défilement.
  • Ils sont intégrés via un module Macrobenchmark qui automatise la génération de profils basés sur l'utilisation réelle.
  • Sa mise en œuvre a un impact direct sur la fidélisation des utilisateurs en offrant une expérience instantanée dès la première minute.

Optimisation du temps de démarrage grâce aux profils de base

Aujourd'hui, plus personne n'a la patience d'attendre le chargement d'une application. Dans l'écosystème mobile, la réactivité fait toute la différence : un utilisateur reste alors avec l'application au lieu de la supprimer en quelques secondes. Pour qu'une interface complexe se charge instantanément, il faut aller au-delà de l'optimisation classique du code et se concentrer sur la façon dont l'appareil traite les instructions avant même qu'elles n'atteignent l'écran.

Pour résoudre les problèmes de latence au démarrage, Google a introduit les profils de base , un outil novateur qui permet aux développeurs d'identifier les portions de code essentielles. Ainsi, l'appareil n'a pas besoin de « découvrir » comment exécuter l'application lors de sa première utilisation, ce qui garantit un fonctionnement fluide dès le premier lancement , qu'il s'agisse d'une installation propre ou d'une mise à jour.

Que sont exactement les profils de base et comment fonctionnent-ils ?

Pour les comprendre, il faut d'abord savoir qu'Android utilise l'environnement d'exécution Android (ART). Traditionnellement, le code est exécuté à l'aide de la compilation à la volée (JIT) , qui traduit le code pendant l'exécution de l'application, ou de la compilation anticipée (AOT) , qui effectue toutes les opérations en amont. Le problème de la compilation JIT est qu'elle peut provoquer de légers ralentissements ou une lenteur initiale, car le code n'est pas optimisé dès le départ.

Les profils de base servent de guide principal. Il s'agit essentiellement d'une liste de classes et de méthodes que le système doit précompiler à l'aide de la compilation AOT avant que l'utilisateur n'ouvre l'application. Ainsi, l'environnement d'exécution n'a pas à interpréter le code à la volée, ce qui peut se traduire par un gain de vitesse allant jusqu'à 30 % lors de l'exécution initiale.

Contrairement aux profils cloud, qui dépendent de milliers d'utilisateurs de l'application et de l'ajout de ces données par Google Play (un processus qui prend plusieurs jours), les profils de base sont directement intégrés au paquet Android App Bundle (AAB) . L'optimisation est ainsi disponible immédiatement, éliminant le délai de latence souvent constaté lors des mises à jour.

Quand est-il essentiel de mettre en œuvre cette technique ?

Toutes les applications ne nécessitent pas le même niveau d'optimisation, mais dans certains cas, elles s'avèrent indispensables. L'utilisation de profils est cruciale pour réduire le temps de démarrage à froid , notamment si votre écran de démarrage comporte de nombreuses dépendances ou un rendu complexe. Si vous constatez que le premier lancement est lent tandis que le second est ultra-rapide, il s'agit d'un problème de compilation que les profils peuvent résoudre.

De plus, leur utilité ne se limite pas aux startups. Elles sont extrêmement précieuses pour améliorer la fluidité du défilement . En précompilant la logique des listes et les animations, vous évitez les saccades et offrez une navigation d'une fluidité exceptionnelle. Elles sont également idéales pour optimiser les fonctionnalités récurrentes , comme le processus de paiement ou d'inscription, garantissant ainsi la rapidité des parcours les plus utilisés.

Configuration étape par étape du module de génération

La méthode la plus moderne pour y parvenir consiste à utiliser un module dédié dans Android Studio. Pour commencer, vous devez vous rendre sur Nouveau module et sélectionnez le modèle Générateur de profil de baseVous définirez ici l'application cible, le nom du module (par exemple, baselineprofile) et le langage de programmation préféré, soit Kotlin, soit Java.

Ce processus automatise la création d'un environnement de test. L'assistant configurera le plugin. androidx.baselineprofile et ajoutera la bibliothèque installateur de profil dans le module d'application. Ce dernier est chargé de garantir que le profil est correctement installé sur les appareils des utilisateurs, même sur les anciennes versions d'Android qui ne prennent pas en charge les profils cloud.

Un détail technique important concerne la gestion de l'obfuscation. Pour que le profil soit valide, il doit être généré sur une variante où `isMinifyEnabled` est défini sur `false` . Cependant, rassurez-vous : R8 est capable de réécrire les règles du profil pour qu'elles correspondent au code obfusqué de l'APK de production, garantissant ainsi une sécurité maximale et une optimisation de la taille.

Création de parcours utilisateurs critiques (CUJ)

Un profil de base qui se contente de lancer l'application est utile, mais pour tirer pleinement parti de ses performances, nous devons définir les Parcours utilisateurs critiquesCela se fait en classe. BaselineProfileGenerator utilizando la regla BaselineProfileRule. À l'intérieur du bloc collectNous devons simuler les actions réelles qu'un utilisateur entreprendrait.

Automatisation des tests de régression visuelle et fonctionnelle
Article connexe :
Guide complet pour l'automatisation des tests de régression visuelle et fonctionnelle

Par exemple, si votre application effectue un chargement asynchrone, il ne suffit pas d'appeler startActivityAndWait()Vous devez implémenter des attentes intelligentes afin que le système enregistre le code qui s'exécute lorsque le contenu apparaît enfin. Ceci est réalisé en interagissant avec l'interface via UiAutomator, en recherchant des éléments spécifiques et en attendant qu'ils deviennent visibles avant la fin du test.

Pour un flux de travail avancé, vous pouvez programmer le générateur Défilement vertical des listes en utilisant la méthode flingAccédez aux écrans détaillés ou gérez les boîtes de dialogue d'autorisation système. Plus la simulation est précise, plus le profil généré le sera également. L'expérience sera d'autant plus fluide utilisateur final réel.

Génération et validation des performances

Une fois le générateur écrit, il est temps de l'exécuter. Idéalement, vous devriez utiliser un Périphérique géré par Gradle (GMD) ou un émulateur avec une image aosp disposer des droits d'administrateur, bien que les versions récentes de la bibliothèque permettent déjà de générer des profils sur des appareils physiques avec Android 13 ou supérieur sans complications.

Lors de l'exécution de la tâche Gradle :app:generateBaselineProfileLe système lance l'application plusieurs fois, collecte les classes et méthodes invoquées et crée un fichier baseline-prof.txtCe fichier est automatiquement placé dans le dossier assets de l'application, prêt à être inclus dans le paquet AAB.

Pour savoir si cela fonctionnait vraiment, nous avons utilisé Jetpack MacrobenchmarkNous avons créé un test qui compare deux scénarios : l’un avec CompilationMode.None() (sans optimisation) et une autre avec CompilationMode.Partial() (en utilisant le profil). Lors de l'analyse de la métrique timeToFullDisplayIl est fréquent d'observer des réductions drastiques en millisecondes, confirmant que le code critique n'a plus besoin d'être compilé en temps réel.

Dans des scénarios concrets, comme avec des applications à grande échelle, on a constaté que le thread Just-in-Time (JIT) passe d'une utilisation de 25 % du temps à seulement 3 %. Cela libère des ressources du processeur et réduit la charge thermique de l'appareil, ce qui se traduit par une application plus stable et plus efficace , notamment sur les appareils d'entrée de gamme.

L'implémentation de profils de base représente un investissement des plus rentables en matière d'expérience utilisateur, car elle permet au logiciel d'être fluide et réactif dès le premier instant. En combinant l'utilisation de modules de test de performance pour générer et valider en continu les temps de démarrage, tout développeur peut transformer une application lente en un outil professionnel et instantané qui fidélise les utilisateurs.


Ajouter comme source préférée dans Google