Ответ
@Composable функции можно оптимизировать с помощью аннотаций:
@Stable– помечает класс или интерфейс как стабильный (все свойстваvalиequals/hashCodeнеизменны). Уменьшает рекомпозиции:
@Stable
data class User(val name: String, val age: Int)
-
@Immutable– строже@Stable: все поля должны бытьvalи неизменяемые коллекции. Гарантирует, что объект никогда не изменится. -
@NonRestartableComposable– отключает автоматический рестарт композиции для функции (используется осторожно). -
@ReadOnlyComposable– для функций, которые только читают состояние (не вызывают рекомпозицию при изменении параметров). -
@OptIn(ExperimentalComposeApi::class)+remember(key)– ручное управление кэшированием с ключами.
Пример оптимизации:
@Composable
fun UserProfile(user: User) {
// Пропускает рекомпозицию, если user не изменился
Text(text = user.name)
}