LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Теги: #VPN
Рейтинг: 56.6% · 5 голосов
Разработка под iOS и Android: Swift, SwiftUI, Kotlin, Jetpack Compose, Flutter, React Native, публикация в App Store и Google Play, оптимизация приложений.
Ответить
Аватара пользователя
Bowden
Сообщения: 80
Зарегистрирован: 12 май 2026, 09:21

LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение Bowden »

Лента на LazyColumn, элементов под пару тысяч, при скролле заметные фризы и подлагивания. Профайлил Layout Inspector — счётчик рекомпозиций крутится как бешеный. С чего начать оптимизацию?
👍 ❤️ 🔥 😄 🤔1
✔ Лучший ответ сформирован автоматически — kube22
Ещё момент по дебагу рекомпозиций: Layout Inspector хорошо, но для понимания что именно тригерит рекомпозицию удобнее Compose compiler report. Добавляешь в build.gradle freeCompilerArgs += ['-P', 'plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=...'], билдишь, и в отчёте видишь какие классы Compose считает нестабильными и почему. Сразу находишь виновника без угадывания.
Перейти к ответу →
Аватара пользователя
gdgdgd
Сообщения: 77
Зарегистрирован: 11 май 2026, 03:27

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение gdgdgd »

Первое и главное — ключи. items(list, key = { it.id }). Без ключей обновление 1000 элементов это сотни мс, с ключами падает в разы. Если ещё не сделал — сделай прямо сейчас и перемерь.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
kernel_veteran
Сообщения: 63
Зарегистрирован: 11 май 2026, 06:09

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение kernel_veteran »

Плюс contentType если у тебя в ленте разные типы карточек. Compose тогда переиспользует композаблы по типу, а не пересоздаёт. На смешанных лентах разница ощутимая.
👍 ❤️1 🔥2 😄 🤔
Аватара пользователя
depechie
Сообщения: 67
Зарегистрирован: 11 май 2026, 11:32

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение depechie »

@gdgdgd ключи есть, id уникальные. Рекомпозиции всё равно сыпятся. Грешу на то что в item прокидываю нестабильную дата-классу со списком внутри.
👍1 ❤️ 🔥 😄1 🤔
Аватара пользователя
tsav
Сообщения: 52
Зарегистрирован: 11 май 2026, 01:00

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение tsav »

@gdgdgd вот оно. List внутри дата-класса делает её unstable, и весь айтем рекомпозится на любой чих. Оберни в ImmutableList из kotlinx.collections.immutable или пометь @Immutable, и читай состояние лямбдой а не значением.
👍2 ❤️ 🔥1 😄 🤔
Аватара пользователя
gdgdgd
Сообщения: 77
Зарегистрирован: 11 май 2026, 03:27

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение gdgdgd »

И не забудь мерить в release-сборке с включённым R8, в debug Compose всегда тормозит и пугает. Половина паник-постов про лаги это замеры в дебаге.
👍1 ❤️ 🔥 😄2 🤔
Аватара пользователя
Kireeich
Сообщения: 20
Зарегистрирован: 14 май 2026, 10:49

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение Kireeich »

derivedStateOf тоже глянь, если у тебя есть производное состояние типа isScrolledToTop. Без него пересчёт идёт на каждый пиксель скролла.
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
asynclover
Сообщения: 70
Зарегистрирован: 13 май 2026, 04:35

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение asynclover »

Завернул в ImmutableList, починил стабильность, перемерил в release — фризы ушли, скролл гладкий. Спасибо, дело реально было в unstable-параметре.
👍1 ❤️ 🔥1 😄1 🤔
Аватара пользователя
hogan20
Сообщения: 71
Зарегистрирован: 13 май 2026, 12:49

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение hogan20 »

@tsav, про ImmutableList всё верно, но важно уточнить: @Immutable — это контракт, который ты берёшь на себя, компилятор не проверяет что ты его не нарушишь. Если внутри класса есть изменяемое поле и ты пометишь @Immutable, Compose поверит тебе на слово и перестанет следить за обновлениями. Это может привести к тому что UI не реагирует на изменения. Лучше ImmutableList — он честный.
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
kube22
Сообщения: 14
Зарегистрирован: 13 май 2026, 07:44

Re: LazyColumn дёргается на 1000+ элементов — куда копать в Compose?

Сообщение kube22 »

✔ Лучший ответ — сформирован автоматически
Ещё момент по дебагу рекомпозиций: Layout Inspector хорошо, но для понимания что именно тригерит рекомпозицию удобнее Compose compiler report. Добавляешь в build.gradle freeCompilerArgs += ['-P', 'plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=...'], билдишь, и в отчёте видишь какие классы Compose считает нестабильными и почему. Сразу находишь виновника без угадывания.
👍2 ❤️1 🔥1 😄1 🤔
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: docker compose как пользоватьсяdocker compose up как запустить контейнерыkubernetes или docker swarm что выбрать

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

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

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