Android Calendar팀이 기준 프로필을 사용하여 앱 시작과 버벅거림을 개선한 방법

기준 프로필을 사용하면 일반적인 사용자 여정의 인터프리터 및 JIT (just-in-time) 컴파일 단계 를 피하여 코드 실행 속도를 최대 30% 개선할 수 있습니다. 기준 프로필을 사용하면 최적화할 사용자 여정을 선택할 수 있으며 앱 시작을 개선하고, 끊김 현상을 줄이는 등의 작업을 할 수 있습니다. 이는 사용자 유지율 및 평점과 같은 비즈니스 측정항목을 개선하는 데 도움이 됩니다. 기준 프로필 에 대해 자세히 알아보세요.

Android Calendar팀은 기준 프로필을 구현하고 앱 시작 시간은 약 20% 개선되었으며 느리거나 정지된 프레임은 약 50% 감소했습니다. 팀에서 기준 프로필을 사용하기로 결정한 이유부터 영향 측정 방법까지 이러한 성능 개선을 달성하기 위해 수행한 엔드 투 엔드 작업은 다음과 같습니다.

클라우드 프로필과 기준 프로필 비교

Android Calendar팀은 이미 앱과의 실제 사용자 상호작용을 기반으로 하는 또 다른 프로필 기반 최적화 (PGO) 방법인 클라우드 프로필을 사용하고 있었습니다. 클라우드 프로필과 기준 프로필을 비교하는 방법은 다음과 같습니다.

프로필 유형 설정 포함된 사용자 여정 사용자층이 다음과 같은 경우 가장 잘 작동함 실현된 영향 지원되는 Android 버전

클라우드 프로필

기본적으로 사용 설정됨

실제 사용자 데이터를 기반으로 자동 선택

크게

며칠 이내

Android 9 (API 수준 28) 이상

기준 프로필

사용자가 구성함

사용자가 선택함

모든 크기

즉시

Android 7 (API 수준 24) 이상

Android Calendar팀이 코드베이스에 기준 프로필을 추가하기로 결정한 주요 이유는 더 빠른 주간 출시 주기로 전환했기 때문입니다. 클라우드 프로필은 상당한 성능 향상을 제공하지만 실제 사용자 데이터 집계를 기반으로 하기 때문에 앱 출시 후 최대 영향에 도달하는 데 1~2일 이 걸립니다. 기준 프로필 로 클라우드 프로필을 보완하면 사용자가 다음 앱 버전이 출시되기 전에 최대 성능 개선을 경험할 수 있는 시간이 늘어납니다.

또한 Android Calendar팀은 프로필에 포함할 중요한 사용자 여정 (CUJ)을 구체적으로 선택할 수 있어야 했습니다. 기준 프로필을 사용하면 이 작업을 할 수 있습니다.

일반적으로 최상의 성능 결과를 얻으려면 기본적으로 사용 설정된 클라우드 프로필 외에 기준 프로필을 사용하는 것이 좋습니다.

포함된 사용자 여정

Android Calendar팀은 기준 프로필에 두 개의 CUJ를 포함하기로 했습니다.

  • 일정 보기에서 앱 열기: 처음에는 기본 보기이므로 앱을 처음 사용하는 사용자 또는 기본 설정을 변경하지 않는 사용자를 위해 최적화하는 것이 중요합니다.
  • 월별 보기에서 앱 열기: 사용자 데이터를 기반으로 많은 사용자가 선택한 보기입니다. 사용자가 앱을 사용하는 방식을 추적하려면 Firebase와 같은 도구를 사용하면 됩니다.

일반적으로 비즈니스에 수익성이 있는 CUJ (해당하는 경우)와 가장 일반적인 CUJ를 추가해야 합니다. 최적화할 CUJ를 선택하는 방법을 자세히 알아보려면 포함할 항목을 참고하세요.

구현

Android Calendar팀은 Jetpack Macrobenchmark 라이브러리 의 내부 래퍼를 사용하여 내부 도구와의 손쉬운 통합 및 일반적인 확장성을 위해 기준 프로필을 생성합니다.

일정 보기에서 앱을 여는 Macrobenchmark 테스트 구성은 다음과 같습니다.

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        uiAutomator {
            startApp(packageName = PACKAGE_NAME)
            // Verify pre-existing recurring events and tasks are shown.
            // onElement waits for the element by default
            onElement { textAsString() == "Recurring event" }
            onElement { textAsString() == "Recurring task" }

            // Open drawer and verify selected view.
            onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
            onElement { contentDescriptionAsString() == "Schedule view, Selected" }
        }
    }

다음을 바꿉니다.

  • PACKAGE_NAME: 기준 프로필을 생성하려는 앱의 패키지 이름입니다.

제어된 출시를 사용하여 영향 측정

기준 프로필은 함께 제공되고 앱이 실행되기 전에 통합되는 APK와 긴밀하게 결합되어 있으므로 표준 A/B 실험을 실행하여 영향을 파악할 수 없습니다. 하지만 Android Calendar팀은 제어된 출시를 사용하여 영향을 정확하게 측정할 수 있었습니다. 제어된 출시에서는 기본적으로 새 앱 버전을 일부 사용자에게만 출시하고 이전 출시와 유사한 버전을 사용하는 사용자와 비교합니다.

기준 프로필을 사용하면 여러 영역에서 다음과 같은 즉각적이고 상당한 개선이 이루어졌습니다. 이 통계는 광범위한 기기와 모든 사용자를 대상으로 집계됩니다. 일정 및 월별 보기에서 시작하는 사용자가 가장 큰 이점을 얻을 수 있지만 데이터베이스에서 캘린더 데이터를 로드하는 것과 같은 공유 프로세스를 최적화하여 다른 사용자도 이점을 얻을 수 있습니다.

  • 중간 대화형 앱 시작 (가장 일반적인 시나리오) 지연 시간이 775ms에서 644ms로 감소 (17%)
  • 중간 콜드 스타트 지연 시간이 1,058ms에서 901ms로 감소 (15%)
  • 중간 웜 스타트 지연 시간이 453ms에서 378ms로 감소 (17%)
  • 일정 및 월별 보기에서 중간 끊김 프레임 속도가 42~60% 감소

기준 프로필과 함께 클라우드 프로필을 사용하는 경우 클라우드 프로필이 생성되므로 첫 주 동안 개선이 약간 감소할 수 있습니다. 하지만 기준 프로필을 사용하면 다른 최적화 외에도 상당한 성능 향상을 관찰할 수 있습니다.

도구 및 기능에 관해 자세히 알아보려면 다음 리소스를 참고하세요.