시배's Android

Compose Docs | Performance 본문

Android/Compose Docs

Compose Docs | Performance

si8ae 2023. 8. 13. 16:44
 

Compose 성능  |  Jetpack Compose  |  Android Developers

Compose 성능 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Jetpack Compose의 목표는 처음부터 우수한 성능을 제공하는 것입니다. 이 페이지에서는 최고의 성능

developer.android.com

Properly configure your app

만약 앱의 성능이 좋지 않다면, 설정 문제일 있습니다. 번째로 확인해야 구성 옵션은 다음과 같습니다.

Build in release mode and uose R8

성능 문제가 있을 경우 앱을 릴리스 모드로 실행해 보는 것이 좋습니다. 디버그 모드는 많은 문제를 발견하는 유용하지만, 성능에 상당한 비용을 부과하며 성능에 영향을 있는 다른 코드 문제를 발견하기 어렵게 만들 있습니다. 우리는 R8 컴파일러를 사용하여 최적화와 축소를 활성화하여 성능이 우수하고 효율적인 릴리스 빌드를 보장하는 것을 권장합니다.

Use a baseline profile

베이스라인 프로파일은 포함된 코드 경로에 대한 해석 및 실시간 컴파일(JIT) 단계를 피함으로써 첫 번째 실행에서 약 30% 정도의 코드 실행 속도 향상을 제공합니다. 앱이나 라이브러리에 베이스라인 프로파일을 포함하여 Android Runtime (ART)은 포함된 코드 경로를 미리 컴파일하여 새로운 앱 설치마다 및 모든 앱 업데이트마다 성능 향상을 제공할 수 있습니다. 이 프로파일 기반 최적화(PGO)를 통해 앱은 시작 시 최적화를 수행하고 상호 작용 중단을 줄이며 처음 실행부터 전체 실행 시간 성능을 개선할 수 있습니다.

Compose는 Android 플랫폼의 일부가 아닌 라이브러리로 배포됩니다. 이 접근 방식을 통해 Compose 팀은 Compose를 자주 업데이트하고 이전 Android 버전을 지원할 수 있습니다. 그러나 라이브러리로 Compose를 배포하는 것은 비용이 발생합니다. Android 플랫폼 코드는 이미 디바이스에 컴파일되어 설치되어 있습니다. 그러나 라이브러리는 앱이 시작될 때 로드되고 기능이 필요한 경우에는 JIT로 해석되어야 합니다. 이로 인해 앱의 시작 및 라이브러리 기능을 처음 사용할 때 속도가 느려질 수 있습니다.

베이스라인 프로파일을 정의하여 성능을 개선할 수 있습니다. 이 프로파일은 중요한 사용자 경로에서 필요한 클래스와 메서드를 정의하며 앱의 APK 또는 AAB와 함께 배포됩니다. 앱 설치 중에 ART는 이 중요한 코드를 AOT로 컴파일하여 앱이 시작될 때 사용할 준비를 합니다.

언제나 좋은 베이스라인 프로파일을 정의하는 것은 항상 간단하지 않으며, 이로 인해 Compose에 기본 프로파일이 함께 제공됩니다. 이 혜택을 보려면 추가 작업을 할 필요가 없을 수 있습니다. 그러나 Compose와 함께 제공되는 베이스라인 프로파일은 Compose 라이브러리 내부의 코드에 대한 최적화만 포함합니다. 최상의 최적화를 얻으려면 앱의 베이스라인 프로파일도 작성하는 것이 가장 좋습니다. 이때, 중요한 사용자 경로를 포함하는 Macrobenchmark를 사용하여 프로파일을 작성하는 것이 좋습니다. 직접 프로파일을 정의할 때에는 프로파일이 도움이 되는지 확인하기 위해 테스트를 수행해야 합니다. Compose UI에 Macrobenchmark 테스트를 작성하고 베이스라인 프로파일을 작성하고 수정하는 과정에서 테스트 결과를 확인하는 것이 좋은 방법입니다.

How the three Compose phases affect performance

Compose는 필요하지 않은 경우 이 중 어느 단계라도 지능적으로 건너뛸 수 있습니다. 예를 들어, 하나의 그래픽 요소가 두 개의 동일한 크기의 아이콘으로 교체되는 경우를 상상해보세요. 이 요소의 크기가 변경되지 않고 UI 트리의 요소가 추가되거나 제거되지 않는다면, Compose는 구성 및 레이아웃 단계를 건너뛰고 이 하나의 요소만 다시 그릴 수 있습니다.

그러나 일부 코딩 실수는 Compose가 어떤 단계를 안전하게 건너뛸 수 있는지 알기 어렵게 만들 수 있습니다. Compose가 의심스러운 경우 모든 세 단계를 실행하게 되며, 이로 인해 UI가 느려질 수 있습니다. 따라서 많은 성능 최적화 기법은 Compose가 수행하지 않아도 되는 단계를 건너뛸 수 있도록 돕는 것입니다.

일반적으로 성능을 향상시킬 수 있는 몇 가지 원칙이 있습니다:

  • 가능한 경우 계산을 composable 함수 외부로 이동하세요. Composable 함수는 UI가 변경될 때마다 다시 실행될 수 있습니다. composable에 넣은 코드는 재실행되며, 애니메이션의 각 프레임마다 재실행될 수 있습니다. composable의 코드를 UI를 구축하는 데 필요한 내용으로만 제한하세요.
  • 가능한 오랫동안 상태 읽기를 지연하세요. 상태 읽기를 하위 composable 또는 나중 단계로 이동함으로써 재구성을 최소화하거나 구성 단계를 완전히 건너뛸 있습니다. 자주 변경되는 상태에 대해 상태 값을 전달하는 대신 람다 함수를 전달하고, 자주 변경되는 상태를 전달할 때는 람다 기반의 수정자를 선호하여 기술을 사용할 있습니다.