По своей сути, стили работают на этапе компоновки и отрисовки в процессе композиции. Это позволяет избежать необходимости создания модификаторов на основе лямбда-функций, поскольку стили всегда пропускают этап композиции.

Улучшение производительности по сравнению с модификаторами достигается за счет трех основных оптимизаций:
- Сдвиг фазы : Стили часто нацелены на фазу отрисовки. При изменении значения Compose аннулирует только затронутую фазу (например, перерисовку), вместо того чтобы запускать полную перекомпозицию или перестановку.
- Отложенное выделение ресурсов : Стили откладывают выделение ресурсов анимации до тех пор, пока анимация фактически не начнётся. Это сокращает объём работы, необходимой на этапе первоначальной композиции.
- Снижение накладных расходов на объекты : цепочка модификаторов выделяет объект для каждого свойства (например, отступа, границы). Стили используют одну лямбда-функцию для применения нескольких свойств, что значительно сокращает выделение памяти. Если стиль определен в теме, эта лямбда-функция используется совместно всеми компонентами, использующими эту тему.
В таблице ниже представлены иллюстративные результаты внутренних тестов производительности модуля Styles в Compose 1.11.0-alpha06 в сравнении с реализацией в Compose без модуля Styles.
Тест basic_box_border_change демонстрирует сильные стороны системы стилей в предотвращении выделения нескольких объектов-модификаторов при обновлении свойств, что приводит к значительному сокращению количества выделений (~77%) и времени (~59%).
Метод испытания | Описание | Смена времени | Изменение распределения |
Изменяет цвет границы | -59,91% | -77,22% | |
Сравнивает состояния наведения курсора/фокусировки/нажатия, определяемые стилем взаимодействия, с состояниями, полученными вручную при взаимодействии. | -5,24% | -14,72% | |
Измеряет начальный состав и расположение элементов в | -4,78% | -6,60% | |
Отображает пять компонентов | +0,62% | +2,41% | |
Сравнивается установка цвета текста с помощью стиля и с использованием | +5,86% | +9,82% |