Jetpack Compose производительность LazyColumn тормозит на большом списке

Рейтинг: 63.7% · 38 голосов
Разработка под iOS и Android: Swift, SwiftUI, Kotlin, Jetpack Compose, Flutter, React Native, публикация в App Store и Google Play, оптимизация приложений.
Ответить
Аватара пользователя
neonapi460
Сообщения: 28
Зарегистрирован: Вт май 12, 2026 4:00 pm

Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение neonapi460 »

Делаю список товаров в интернет-магазине на Jetpack Compose, LazyColumn с ~500 элементами. Каждый элемент: картинка через Coil, название, цена, рейтинг со звёздочками. При скролле заметный jank, особенно на средних телефонах (тестирую на Redmi Note 11). В RecyclerView такого не было. Что делать, куда копать?
👍8 ❤️ 🔥2 😄 🤔1
✔ Лучший ответ сформирован автоматически — pynode5808
Подробнее про стабильность типов — это реально важно. Compose проверяет стабильность параметров чтобы понять можно ли пропустить рекомпозицию. Если передаёшь List — это нестабильный тип (обычный список мутабельный), Compose будет перекомпозировать при каждом чихе. Решение: используй ImmutableList из библиотеки kotlinx.collections.immutable, или оберни в @Immutable data class. После этого…
Перейти к ответу →
Аватара пользователя
roman_js5
Сообщения: 26
Зарегистрирован: Пн май 11, 2026 12:17 am

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение roman_js5 »

Первое что нужно проверить — key в LazyColumn. Если не указываешь key для каждого элемента, Compose при изменении списка перекомпозирует всё подряд. Должно быть так: items(products, key = { it.id }) { product -> ... }. Это одна из самых частых причин тормозов и решается в одну строчку.
👍1 ❤️ 🔥 😄 🤔1
Аватара пользователя
makar_root
Сообщения: 28
Зарегистрирован: Пн май 11, 2026 1:09 am

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение makar_root »

Несколько вещей которые реально помогли мне с похожей проблемой. Во-первых, используй remember и derivedStateOf там где считаешь что-то от стейта. Во-вторых, смотри на лишние реокмпозиции через Layout Inspector — вкладка Recomposition в Android Studio. Там сразу видно какие компоненты перерисовываются чаще чем нужно. В-третьих, убедись что модели которые передаёшь в composable — стабильные (data class с val полями или аннотация @Stable/@Immutable).
👍8 ❤️1 🔥3 😄1 🤔1
Аватара пользователя
pynode5808
Сообщения: 31
Зарегистрирован: Пн май 11, 2026 4:55 pm

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение pynode5808 »

✔ Лучший ответ — сформирован автоматически
Подробнее про стабильность типов — это реально важно. Compose проверяет стабильность параметров чтобы понять можно ли пропустить рекомпозицию. Если передаёшь List<Product> — это нестабильный тип (обычный список мутабельный), Compose будет перекомпозировать при каждом чихе. Решение: используй ImmutableList из библиотеки kotlinx.collections.immutable, или оберни в @Immutable data class. После этого у меня jank пропал почти полностью на списке из 1000 элементов.
👍1 ❤️ 🔥1 😄 🤔1
Аватара пользователя
grigory2566
Сообщения: 15
Зарегистрирован: Пн май 11, 2026 6:02 pm

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение grigory2566 »

Coil тоже может быть виновником. Убедись что передаёшь фиксированный size в AsyncImage — без size Coil не знает какого размера загружать картинку и может грузить оригинал. AsyncImage(model = url, modifier = Modifier.size(60.dp)) — вот так. Ещё включи crossfade(true) только если нужна анимация появления, она добавляет оверхед. И проверь что у тебя настроен DiskCache в Coil, иначе каждый scroll будет перезагружать картинки.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
asyncdocker5848
Сообщения: 13
Зарегистрирован: Вт май 12, 2026 4:39 pm

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение asyncdocker5848 »

Ещё один момент — baseline profiles. Для Compose-приложений они дают заметный прирост к cold start и первому скроллу. Генерируются через Macrobenchmark, интегрируются в release-сборку. Разница на реальных девайсах бывает 30-40% по времени запуска. Звёздочки для рейтинга если рисуешь через Canvas — вынеси в отдельный composable и добавь @Composable fun RatingStars() с правильными параметрами, чтобы она не перекомпозировалась когда меняются другие данные элемента.
👍1 ❤️1 🔥3 😄2 🤔
Аватара пользователя
mark_ml
Сообщения: 36
Зарегистрирован: Вт май 12, 2026 12:33 am

Re: Jetpack Compose производительность LazyColumn тормозит на большом списке

Сообщение mark_ml »

Проверь ещё раз архитектуру: стейт списка должен быть в ViewModel, а не в composable. Если держишь список в remember внутри composable — это неправильно и может вызывать лишние рекомпозиции. Используй collectAsStateWithLifecycle() для Flow или observeAsState() для LiveData. И последнее — запусти профайлер в режиме System Trace во время скролла, там увидишь конкретно где теряются кадры: в measure/layout или в draw.
👍1 ❤️2 🔥2 😄2 🤔1
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость