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