Forwarded from Android Broadcast (Кирилл Розов)
Команда Ozon стоклнулась с проблемой скорости работы Jetpack Compose. Все это они решили, выработали практики и теперь делятся ими в статье (28 мин):
👉 Разберитесь как работает отрисовка и обновление UI в Compose
👉 Правильно выставляйте аннотации @Stable и @Immutable
👉 Правильно готовьте лямбды (не ссылку на метод) через remember
👉 Оптимизируйте функции, так чтобы они были пропускаемые в рекомпозиции
👉 Уменьшайте область рекомпозиции
👉 Быстрые вычисления при смене состояния
👉 Оптимально реализуйте собственные layout
👉 Не менять состояние, которое только что обновилось
👉 Занимайтесь отладкой и профилированием
#compose #performance
👉 Разберитесь как работает отрисовка и обновление UI в Compose
👉 Правильно выставляйте аннотации @Stable и @Immutable
👉 Правильно готовьте лямбды (не ссылку на метод) через remember
👉 Оптимизируйте функции, так чтобы они были пропускаемые в рекомпозиции
👉 Уменьшайте область рекомпозиции
👉 Быстрые вычисления при смене состояния
👉 Оптимально реализуйте собственные layout
👉 Не менять состояние, которое только что обновилось
👉 Занимайтесь отладкой и профилированием
#compose #performance
Оптимизация анимации на Compose (10 мин)
Сравнение различных API для анимации в Compose и преимущества разных подходов, ситуации когда стоит выбрать какой и какие проблемы они в себе таят. Найдете кучу полезных лайфхаков
#animation #performance
Сравнение различных API для анимации в Compose и преимущества разных подходов, ситуации когда стоит выбрать какой и какие проблемы они в себе таят. Найдете кучу полезных лайфхаков
#animation #performance
История разработчика, который копался в причинах постоянной рекомпозиции LazyList. Вся причина оказалась в модификатор clickable, а точнее composed, который лежит под ним.
Вывод - всегда анализируйте рекомпозицию вашего UI с помощью инструментов, предоставленных командой Google.
В Compose 1.5 авторы фреймворка уже устранили проблему и мигрировали Clickable модификатор на новую систему.
#performance
Вывод - всегда анализируйте рекомпозицию вашего UI с помощью инструментов, предоставленных командой Google.
В Compose 1.5 авторы фреймворка уже устранили проблему и мигрировали Clickable модификатор на новую систему.
#performance
Уменьшаем рекомпозиции для изображений в Jetpack Compose
Разбор особенностей рекомпозиции изображений и иконок в Compose
#performance
Разбор особенностей рекомпозиции изображений и иконок в Compose
#performance
📺 Enhancing Jetpack Compose app performance (28 мин) - большое видео с советами про оптимизацию скорости работы Compose UI
#performance @compose_broadcast
#performance @compose_broadcast
YouTube
Enhancing Jetpack Compose app performance
In this video, Tomáš will demonstrate techniques for improving Jetpack Compose app performance through measurement, debugging, and strategic optimization.
You will gain insights into the effective use of Macrobenchmarks in Compose to understand startup and…
You will gain insights into the effective use of Macrobenchmarks in Compose to understand startup and…
В Jetpack Compose 1.5.5. появилась возможность в виде конфигурационого файла передать Compose Compiler типы, которые считать Stable для оптимизации работы Compose UI. В статье (6 мин, EN, ссылка без VPN) разбирается эта фича и ее влияние, а также как получить отчеты
#performance
#performance
Довольно хорошая демонстрация (EN, 7 мин, ссылка без VPN) как отслеживать какие функции в Compose слишком часто выполняются при рекомпозиции и как оптимизировать работу с помощью аннотация
#android #performance @compose_broadcast
@Stable и @Immutable#android #performance @compose_broadcast
Forwarded from Android Broadcast (Кирилл Розов)
Стартует интересный опыт - разработчик написал одно и тоже приложения 15 раз на разных стеках UIKit, SwiftUI, XML, Compose и Compose Multiplatform и меняя другие технологии.
🔗 Часть 1 (EN, 12 мин). Методология (Ссылка без VPN)
🔗 Часть 2 (EN, 21 мин). Результаты производительности (Ссылка без VPN)
🔗 Часть 3 (EN, 10 мин). Подведение итогов (Ссылка без VPN)
#performance @android_broadcast
🔗 Часть 1 (EN, 12 мин). Методология (Ссылка без VPN)
🔗 Часть 2 (EN, 21 мин). Результаты производительности (Ссылка без VPN)
🔗 Часть 3 (EN, 10 мин). Подведение итогов (Ссылка без VPN)
#performance @android_broadcast
Осознанная оптимизация Compose 2: В борьбе с композицией (15 мин)
В статье автор делится свежими находками и передовыми практиками в оптимизации Compose. Чтобы максимально углубиться в тему и почитать первую часть статьи
@compose_broadcast #performance
В статье автор делится свежими находками и передовыми практиками в оптимизации Compose. Чтобы максимально углубиться в тему и почитать первую часть статьи
@compose_broadcast #performance
Еще одна статья (EN, 7м) на тему советов как сделать UI на Compose быстрым. Особо ничего нового, да и ребята написали про это очень подробно и на русском на Хабре
#performance @compose_broadcast
#performance @compose_broadcast
В статье (EN, 5м) рассматриваются разные подходы к написанию собственных Modifier в Compose
🔗 Ссылка без VPN
#performance @compose_broadcast
🔗 Ссылка без VPN
#performance @compose_broadcast
В Compose 1.9.0 появляется новое внутреннее API - PausableComposition. Оно позволит:
👉 Инкрементальная рекомпозиция: Подготовка UI, разбивая работу на части
👉 Прогрев UI: Делать подготовку UI асинхронно, до того как она кажется на экране
Обещают хорошее улучшение для LazyColumn и LazyRow
#compose #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Вышел крупный релиз плагина для Android Studio. Две главные фичи:
👉 Recomposition Cascade Visualizer
Правый клик на любой @Composable → "Analyze Recomposition Cascade" — и получаешь дерево всех downstream-компонентов, которые будут перерисованы. Для каждого показывается статус (skippable / non-skippable), общая статистика и максимальная глубина. Двойной клик по узлу — переход к исходнику. Работает с защитой от циклов и ограничением глубины до 10 уровней.
👉 Live Recomposition Heatmap
Прямо в редакторе, над каждой composable-функцией, в реальном времени отображается количество рекомпозиций с подключённого устройства через ADB. Цветовая индикация:
🟢 < 10 — всё ок
🟡 10–50 — стоит присмотреться
🔴 50+ — проблема
Данные читаются из TraceRecomposition событий logcat. Поддерживается несколько устройств одновременно.
#Compose #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
skydoves выпустил 0.10.0 с двумя фичами, которые доделывают логику инструмента.
ESTIMATED (только статика), с live heatmap — MEASURED (ложные тревоги уходят вниз в рейтинге). Фиксы применяются двойным кликом с предпросмотром.@TraceRecomposition функциям, то есть видел не весь модуль. Trace-all инструментирует всё:composeStabilityAnalyzer {
traceAll {
enabled.set(true)
threshold.set(2)
variants.set(listOf("debug"))
}
}Release-сборки не трогает. Теперь рейтинг Doctor строится по реальным замерам на всём модуле, а не только там, где успел поставить аннотацию.
Раньше надо было самому решать что смотреть и куда ставить аннотации. Теперь включаешь trace-all, запускаешь Doctor, получаешь список с конкретными fix'ами.
🔗 doveletter.dev
#Compose #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
Очень хочется верить в то, что это реально, а также что это можно сделать просто без отладки и замера характеристик рендеринга.
#Compose #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM