스타일은 설계상 Compose의 레이아웃 및 그리기 단계에서 작동합니다. 이렇게 하면 스타일이 항상 컴포지션 단계를 건너뛰므로 람다 기반 수정자를 만들 필요가 없습니다.

수정자 대비 성능 개선은 다음 세 가지 기본 최적화에서 비롯됩니다.
- 위상 이동: 스타일은 그리기 단계를 타겟팅하는 경우가 많습니다. 값이 변경되면 Compose는 전체 리컴포지션이나 리레이아웃을 트리거하는 대신 영향을 받는 단계 (예: 다시 그리기)만 무효화합니다.
- 지연 할당: 스타일은 애니메이션이 실제로 시작될 때까지 애니메이션 리소스 할당을 지연합니다. 이렇게 하면 초기 구성 중에 필요한 작업이 줄어듭니다.
- 객체 오버헤드 감소: 연결된 수정자는 모든 속성 (예: 패딩, 테두리)에 객체를 할당합니다. 스타일은 단일 람다를 사용하여 여러 속성을 적용하므로 메모리 할당이 크게 줄어듭니다. 스타일이 테마에 정의된 경우 해당 람다는 해당 테마를 사용하는 모든 구성요소 간에 공유됩니다.
다음 표는 스타일이 없는 Compose의 구현과 비교하여 Compose 1.11.0-alpha06의 스타일의 내부 성능 벤치마크의 결과를 보여줍니다.
basic_box_border_change 테스트는 속성 업데이트 중에 여러 수정자 객체의 할당을 방지하는 스타일 시스템의 강점을 강조하여 할당이 약 77% 감소하고 시간이 약 59% 감소합니다.
테스트 방법 |
설명 |
시간 변경 |
할당 변경 |
업데이트 성능을 측정하기 위해 |
-59.91% |
-77.22% |
|
스타일 기반 마우스 오버/포커스/누름 상태와 수동 상호작용 상태 수집을 비교합니다. |
-5.24% |
-14.72% |
|
연결된 수정자가 5개인 |
-4.78% |
-6.60% |
|
하드코딩된 문자열로 |
+0.62% |
+2.41% |
|
스타일을 통해 텍스트 색상을 설정하는 것과 |
+5.86% |
+9.82% |