mobile-best-practice/chapters/MBP_019_fr.md

2.8 KiB
Raw Blame History

Jetpack Compose : Améliorer la "skipabilité" d'une fonction pour réduire le nombre de recomposition inutile

Identifiants

//TODO

Catégories

Cycle de vie Tiers Responsable
3. Réalisation (fabrication / développement) Utilisateur/Terminal Architecte Logiciel/Développeur

Indications

Degré de priorité Mise en oeuvre Impact écologique
4 4 4
Ressources Economisées
Processeur

Description

L'une des optimisations faites par Jetpack Compose :

  • Éviter le plus possible de recomposer un composant qui nest pas impacté par un changement détat.

Pour cela, Jetpack Compose calcule la "skipabilité" d'une fonction, en évaluant d'abord la stabilité de ses paramètres.

Stabilité des paramètres :

  • Immutable
  • Stable : Type mutable mais pour lequel Jetpack Compose sera notifié en cas de changement de l'une de ses propriétés publiques.
  • Unstable

3 situations typiques où Jetpack Compose ne peut pas définir une fonction comme skippable :

  1. La propriété est mutable à cause d'une variable mutable déclarée avec var
  2. La propriété est de type List, Set ou Map. En effet, ces types sont considérés comme unstable par Compose.
  3. La propriété utilise un type provenant d'une dépendance externe.

L'outil Compose Compiler Report permet d'obtenir facilement un rapport analysant la stabilité des fonctions Composable d'un projet Android.

Il peut être intéressant de mener ce genre d'analyse sur les fonctions Composable les plus riches d'une application.

Exemple

Pour améliorer la "skipabilité" d'une fonction Composable et ainsi ne pas trop sollicité le processeur, il faut :

  1. Utiliser val plutôt que var.
  2. Utiliser ImmutableList (KotlinX) :
dependencies {
   implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:${version}")
}
  1. Marquer une data classe comme @Immutable si elle utilise un type provenant d'une dépendance externe
@Immutable
data class LogEntry {
    val timestamp: LocalDateTime,
    val log: String
)

Principe de validation

Le nombre ... est inférieur ou égal à
Fonctions Composables riches dans l'application dont la skipabilité n'a pas été optimisée 40%