2.8 KiB
2.8 KiB
Jetpack Compose : Améliorer la "skipabilité" d'une fonction pour réduire le nombre de recomposition inutile
Identifiants
V1 |
---|
19 |
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 n’est 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
:
- La propriété est mutable à cause d'une variable mutable déclarée avec
var
- La propriété est de type
List
,Set
ouMap
. En effet, ces types sont considérés comme unstable par Compose. - 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 :
- Utiliser
val
plutôt quevar
. - Utiliser
ImmutableList
(KotlinX) :
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:${version}")
}
- 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% |