mobile-best-practice/chapters/MBP_019_fr.md

75 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 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](https://developer.android.com/jetpack/compose/performance/stability/diagnose#compose-compiler) 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) :
```shell
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:${version}")
}
```
3. Marquer une data classe comme `@Immutable` si elle utilise un type provenant d'une dépendance externe
```kotlin
@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% |