Compose에서 프레임을 업데이트하면 다음 세 단계를 거칩니다.
- 컴포지션: Compose가 표시할 항목을 결정합니다. 구성 가능한 함수를 실행하고 UI 트리를 빌드합니다.
- 레이아웃: Compose가 UI 트리에 있는 각 요소의 크기와 배치를 결정합니다.
- 그리기: Compose가 실제로 개별 UI 요소를 렌더링합니다.
Compose는 필요하지 않으면 이러한 단계를 지능적으로 건너뛸 수 있습니다. 예를 들어 단일 그래픽 요소가 크기가 같은 두 아이콘 간에 전환된다고 가정해 보겠습니다. 이 요소는 크기가 변경되지 않고 UI 트리의 요소가 추가되거나 삭제되지 않으므로 Compose는 컴포지션 단계와 레이아웃 단계를 건너뛰고 이 요소 하나만 다시 그릴 수 있습니다.
그러나 코딩 실수로 인해 Compose가 안전하게 건너뛸 수 있는 단계를 파악하기 어려울 수 있으며, 이 경우 Compose는 세 단계를 모두 실행하므로 UI가 느려질 수 있습니다. 따라서 성능 권장사항은 대부분 Compose가 필요하지 않은 단계를 건너뛰도록 돕는 데 중점을 둡니다.
자세한 내용은 Jetpack Compose 단계 가이드를 참고하세요.
일반 원칙
몇 가지 광범위한 원칙을 따르면 일반적으로 성능을 개선할 수 있습니다.
- 가능하면 컴포저블 함수 외부로 계산을 이동합니다. 구성 가능한 함수는 UI가 변경될 때마다 다시 실행해야 할 수 있습니다. 컴포저블에 넣은 모든 코드는 잠재적으로 애니메이션의 모든 프레임에서 다시 실행됩니다. 컴포저블의 코드를 UI를 빌드하는 데 필요한 것으로만 제한합니다.
- 최대한 오랫동안 상태 읽기를 연기합니다. 상태 읽기를 하위 컴포저블 또는 이후 단계로 이동하면 재구성을 최소화하거나 컴포지션 단계를 완전히 건너뛸 수 있습니다. 자주 변경되는 상태의 상태 값 대신 람다 함수를 전달하고, 자주 변경되는 상태를 전달할 때 람다 기반 수정자를 기본으로 선택하여 이를 실행할 수 있습니다. 이 기법의 예는 권장사항 따르기의 최대한 읽기 연기 섹션을 참고하세요.
추가 리소스
- 앱 성능 가이드: Android에서 성능을 개선하기 위한 권장사항, 라이브러리, 도구를 알아봅니다.
- 성능 검사: 앱 성능을 검사합니다.
- 벤치마킹: 앱 성능을 벤치마킹합니다.
- 앱 시작: 앱 시작을 최적화합니다.
- 기준 프로필: 기준 프로필을 이해합니다.