Ответ
Compose использует интеллектуальную рекомпозицию - перерисовываются только измененные компоненты, а не вся иерархия. В отличие от XML, где вложенность ViewGroup создает дополнительные измерения и layout-проходы, Compose строит единое дерево модификаторов, которое оптимизируется в runtime.
Пример:
Box {
Column {
Text("Hello") // при изменении только этого текста
Text("World") // этот не будет перерисовываться
}
}
Ключевые отличия:
- Нет многократных measure/layout проходов
- Ленивая композиция (например, LazyColumn)
- Модификаторы объединяются в один проход
- Skip-логика при рекомпозиции
Ответ 18+ 🔞
Ну вот, смотри, объясню тебе про эту вашу Compose, как есть. Представь, что раньше, в старом добром XML, каждый раз, когда ты чихнул, система начинала пересчитывать весь интерфейс, как будто после каждого твоего чиха надо заново всю квартиру мебель двигать. Ёпта, это же пиздец какой-то, правда? Ты текст в одном месте поменял, а у тебя пол-экрана дергается, потому что какой-нибудь ViewGroup решил, что ему надо два раза измериться, чтобы понять, куда ему встать. Хуй с горы, одним словом.
А теперь Compose. Это как будто у тебя не грузчики с диванами, а умный архитектор, который смотрит: «Ага, вот эту картиночку на стене поменяли, а всё остальное — похуй, стоит на своих местах». Он не трогает то, что не изменилось. Вот смотри на этот код:
Box {
Column {
Text("Hello") // при изменении только этого текста
Text("World") // этот не будет перерисовываться
}
}
Вот ты меняешь «Hello» на «Привет». В XML бы начался ад: Column бы перемерился, соседи бы поехали... А здесь что? Compose смотрит на это дело и говорит: «Э, сабака сука, я же умный. Я вижу, что Text("World") — тот же самый объект, у него состояние не поменялось. Зачем его трогать? Пусть себе стоит». И перерисовывает только первую строчку. Овердохуища экономии ресурсов, я тебе скажу.
Вот в чём, блядь, основные плюсы, если по пунктам:
-
Нет этих ебучих многократных проходов. Раньше виджет мог измеряться несколько раз, потому что родитель не мог с первого раза решить, как его разместить. Это как пытаться впихнуть холодильник в дверь, крутя его со всех сторон. В Compose всё за один заход, чётко и ясно. Спроектировал, измерил, разместил — и пошёл пить чай.
-
Ленивая композиция — это вообще песня.
LazyColumnилиLazyRow— это ж святое. Они не создают все элементы сразу, как старыйListView, который мог попытаться нарисовать тысячу строк, даже если ты видишь только пять. Нет, тут только то, что на экране, и maybe чуть-чуть про запас. Остальное — в рот меня чих-пых, лежит себе в памяти и ждёт своего часа. Гениально и просто. -
Модификаторы не навешиваются, как гирлянды на ёлку. В XML ты на каждый
Viewмог нацепить кучу атрибутов:padding,margin,background,clickListener. И каждый раз это была отдельная операция. В Compose все модификаторы сливаются в одну, блядь, инструкцию за один проход. Как будто ты не по одному ингредиенту в суп кидаешь, а сразу готовый букет Гарни бросил. -
Skip-логика — это наш бро. Композер смотрит на параметры функции-компонента. Если они не изменились, он просто плюёт и говорит: «Да похуй, не буду я эту функцию снова вызывать, и так сойдёт». Это и есть та самая умная рекомпозиция. Ты сам от себя охуеешь, когда увидишь, как летает интерфейс, потому что пересчитывается только то, что реально нужно.
Короче, если раньше разработка под Android была как езда на запряжённой кляче, которая жрёт бензина дохуя, то Compose — это сесть в теслу и понять, что можно ехать быстро, тихо и ещё и стекло не запотевает. Волнение ебать, но приятное.