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

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

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

Сообщение clickhousefan »

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

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

Сообщение kotlinmaster »

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

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

Сообщение mstrbates »

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

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

Сообщение radiomaker »

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

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

Сообщение gpu2000 »

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

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

Сообщение lteng1 »

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

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

Сообщение roman2026 »

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

Вернуться в «Мобильная разработка»

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

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