Преимущества стилей в производительности

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

Этапы сочинения и применение стилей
Рисунок 1. Этапы создания композиции и порядок применения стилей.

Улучшение производительности по сравнению с модификаторами достигается за счет трех основных оптимизаций:

  • Сдвиг фазы : Стили часто нацелены на фазу отрисовки. При изменении значения Compose аннулирует только затронутую фазу (например, перерисовку), вместо того чтобы запускать полную перекомпозицию или перестановку.
  • Отложенное выделение ресурсов : Стили откладывают выделение ресурсов анимации до тех пор, пока анимация фактически не начнётся. Это сокращает объём работы, необходимой на этапе первоначальной композиции.
  • Снижение накладных расходов на объекты : цепочка модификаторов выделяет объект для каждого свойства (например, отступа, границы). Стили используют одну лямбда-функцию для применения нескольких свойств, что значительно сокращает выделение памяти. Если стиль определен в теме, эта лямбда-функция используется совместно всеми компонентами, использующими эту тему.

В таблице ниже представлены иллюстративные результаты внутренних тестов производительности модуля Styles в Compose 1.11.0-alpha06 в сравнении с реализацией в Compose без модуля Styles.

Тест basic_box_border_change демонстрирует сильные стороны системы стилей в предотвращении выделения нескольких объектов-модификаторов при обновлении свойств, что приводит к значительному сокращению количества выделений (~77%) и времени (~59%).

Метод испытания

Описание

Смена времени

Изменение распределения

basic_box_border_change

Изменяет цвет границы Box для измерения производительности обновления.

-59,91%

-77,22%

input_state_basic_box

Сравнивает состояния наведения курсора/фокусировки/нажатия, определяемые стилем взаимодействия, с состояниями, полученными вручную при взаимодействии.

-5,24%

-14,72%

базовый_бокс

Измеряет начальный состав и расположение элементов в Box с пятью связанными между собой модификаторами.

-4,78%

-6,60%

базовый_текст

Отображает пять компонентов BasicText с жестко закодированными строками.

+0,62%

+2,41%

базовый_текст_предоставленный_цвет

Сравнивается установка цвета текста с помощью стиля и с использованием CompositionLocalProvider .

+5,86%

+9,82%