Jak zespół Kalendarza na Androida usprawnił uruchamianie i zacinanie się aplikacji dzięki profilom Baseline

Profile podstawowe zwiększają szybkość wykonywania kodu nawet o 30% dzięki unikaniu kroków kompilacji interpretera i kompilacji JIT w przypadku typowych ścieżek użytkownika. Profile bazowe pozwalają wybrać ścieżki użytkowników, które chcesz zoptymalizować. Mogą one pomóc w szybszym uruchamianiu aplikacji, zmniejszeniu liczby zacięć i innych problemów, co z kolei może poprawić wskaźniki biznesowe, takie jak utrzymanie użytkowników i oceny. Więcej informacji o profilach podstawowych

Zespół Kalendarza Google wdrożył profile bazowe i zaobserwował skrócenie czasu uruchamiania aplikacji o około 20% oraz zmniejszenie liczby powolnych lub zamrożonych klatek o około 50%. Poniżej znajdziesz opis ich działań od początku do końca, które pozwoliły im osiągnąć te wyniki – od powodów, dla których zdecydowali się użyć profili bazowych, po sposób pomiaru wpływu.

Profile w Google Cloud a profile podstawowe

Zespół Kalendarza Androida używał już profili w chmurze, które są inną metodą optymalizacji opartej na profilach (PGO) opartą na rzeczywistych interakcjach użytkowników z aplikacją. Oto porównanie profili w chmurze i profili podstawowych:

Typ profilu Skonfiguruj Obejmuje ścieżki użytkowników Najlepiej sprawdza się, gdy baza użytkowników jest Wpływ zrealizowany Obsługiwane wersje Androida

Profile w Google Cloud

Domyślnie włączone

Wybierane automatycznie na podstawie danych o rzeczywistych użytkownikach

Duży

W ciągu kilku dni

Android 9 (poziom 28 interfejsu API) lub nowszy

Profile podstawowe

Skonfigurowane przez Ciebie

Wybrane przez Ciebie

Wszystkie rozmiary

Natychmiast

Android 7 (poziom 24 interfejsu API) lub nowszy

Jednym z głównych powodów, dla których zespół Kalendarza Androida zdecydował się dodać profile podstawowe do swojego kodu, było przejście na szybszy, cotygodniowy cykl wydawniczy. Profile w Cloud zapewniają znaczny wzrost skuteczności, ale osiągają szczytowy wpływ dopiero po 1–2 dniach od uruchomienia aplikacji, ponieważ opierają się na agregowaniu danych użytkowników z rzeczywistego świata. Uzupełnienie profili w chmurze profilami podstawowymi daje użytkownikom więcej czasu na korzystanie z ulepszeń wydajności przed wprowadzeniem kolejnej wersji aplikacji.

Dla zespołu Kalendarza na Androida ważne było też, aby móc wybierać, które kluczowe ścieżki użytkownika mają być uwzględnione w profilu. Można to zrobić za pomocą profili podstawowych.

Aby uzyskać najlepsze wyniki, zalecamy używanie profili podstawowych oprócz profili w chmurze, które są domyślnie włączone.

Obejmuje ścieżki użytkowników

Zespół Kalendarza Androida zdecydował się uwzględnić w profilach podstawowych 2 CUJ:

  • Otwieranie aplikacji w widoku harmonogramu: początkowo jest to widok domyślny, dlatego warto go zoptymalizować pod kątem użytkowników, którzy korzystają z aplikacji po raz pierwszy lub nie zmieniają ustawień domyślnych.
  • Otwieranie aplikacji w widoku miesiąca: wybrany widok dla wielu użytkowników na podstawie danych użytkowników. Aby śledzić, jak użytkownicy korzystają z aplikacji, możesz używać narzędzi takich jak Firebase.

Zwykle należy dodawać CUJ, które są korzystne dla firmy (w odpowiednich przypadkach), oraz CUJ, które występują najczęściej. Więcej informacji o wybieraniu CUJ do optymalizacji znajdziesz w sekcji Co uwzględnić.

Implementacja

Zespół Kalendarza Androida używa wewnętrznej otoczki biblioteki Jetpack Macrobenchmark do generowania profili bazowych, aby ułatwić integrację z narzędziami wewnętrznymi i ogólną skalowalność.

Oto konfiguracja testu Macrobenchmark dotyczącego otwierania aplikacji w widoku harmonogramu:

@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" }
        }
    }

Zastąp te elementy:

  • PACKAGE_NAME: nazwa pakietu aplikacji, dla której chcesz wygenerować profile podstawowe.

Mierzenie wpływu za pomocą kontrolowanych wersji

Profile bazowe są ściśle powiązane z plikiem APK, z którym są dostarczane, i są włączane przed uruchomieniem aplikacji, więc nie można przeprowadzić standardowego eksperymentu A/B, aby poznać ich wpływ. Zespół Kalendarza Androida był jednak w stanie dokładnie zmierzyć wpływ zmian za pomocą kontrolowanych wydań, w których nowa wersja aplikacji jest udostępniana tylko podzbiorowi użytkowników, a następnie porównywana z użytkownikami, którzy korzystają z wersji podobnej do poprzedniej.

Dzięki profilom podstawowym odnotowali natychmiastową, znaczącą poprawę w wielu obszarach: Te statystyki są agregowane na wielu urządzeniach i wśród wszystkich użytkowników. Największe korzyści odniosą użytkownicy, którzy zaczynają od widoku harmonogramu i widoku miesiąca, ale inni użytkownicy również skorzystają dzięki optymalizacji wspólnych procesów, takich jak wczytywanie danych kalendarza z bazy danych.

  • Mediana czasu uruchamiania aplikacji interaktywnej (najczęstszy scenariusz) zmniejszyła się z 775 ms do 644 ms (o 17%).
  • Mediana czasu oczekiwania podczas uruchomienia „na zimno” zmniejszyła się z 1058 ms do 901 ms (o 15%).
  • Mediana czasu oczekiwania na uruchomienie częściowo z pamięci zmniejszyła się z 453 ms do 378 ms (o 17%).
  • Mediana liczby klatek z zacięciami spadła o 42–60% w widokach harmonogramu i miesiąca.

Pamiętaj, że jeśli używasz profili w chmurze w połączeniu z profilami podstawowymi, w ciągu pierwszego tygodnia możesz zauważyć niewielki spadek skuteczności, ponieważ profile w chmurze są generowane. Nadal jednak powinieneś zauważyć znaczny wzrost wydajności dzięki profilom bazowym w połączeniu z innymi optymalizacjami.

Więcej informacji o narzędziach i funkcjach znajdziesz w tych materiałach: