Studia przypadków

Monzo zwiększa wskaźniki skuteczności nawet o 35% dzięki prostej aktualizacji R8

Czas czytania: 2 min
Ben Weiss
Inżynier ds. relacji z deweloperami

Monzo to brytyjski bank cyfrowy, który ma 15 milionów klientów i stale się rozwija. W miarę skalowania aplikacji zespół inżynierów uznał czas uruchamiania aplikacji za kluczowy obszar wymagający poprawy, ale obawiał się, że będzie to wymagało znacznych zmian w bazie kodu.

Dzięki pełnemu włączeniu optymalizacji R8 firma Monzo osiągnęła ogromną redukcję liczby błędów typu „Aplikacja nie odpowiada” (ANR) o 35%. Ta prosta zmiana pokazała, że skuteczne optymalizacje nie zawsze wymagają złożonych prac programistycznych.

Zwiększanie skuteczności dzięki pełnemu trybowi R8

Monzo uznał, że tryb pełny R8 jest łatwym do wdrożenia rozwiązaniem, które warto wypróbować. Okazało się, że działa i poprawia wydajność w każdym aspekcie:

  • Niezawodność uruchamiania: uruchomienia „na zimno” zostały ulepszone o 30%, uruchomienia „na ciepło” o 24%, a uruchomienia z pamięci o 14%.
  • Szybkość uruchamiania: czas uruchamiania P50 skrócił się o 11%, a czas uruchamiania P90 o 12%.
  • Skuteczność: ogólny rozmiar aplikacji został zmniejszony o 9%.
  • Stabilność: zmniejszenie liczby błędów ANR o 35%.
AANDDM_Monzo_Quote-1.png
large_AANDDM_Monzo_Quote-2.png

Włączanie optymalizacji za pomocą jednej zmiany

Wiele aplikacji na Androida używa nieaktualnego domyślnego pliku konfiguracyjnego, który wyłącza większość funkcji optymalizatora R8. Główną zmianą, jaką wprowadził Monzo, aby uzyskać poprawę wydajności, było zastąpienie domyślnego pliku proguard-android.txt plikiem proguard-android-optimize.txt. Ta zmiana usuwa instrukcję -dontoptimize i umożliwia prawidłowe działanie R8.

buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}

Po wprowadzeniu tej zmiany warto sprawdzić pliki konfiguracyjne Keep. Te pliki informują R8, które części kodu mają pozostać bez zmian (zwykle dlatego, że są wywoływane dynamicznie lub przez biblioteki zewnętrzne). Usuwanie niepotrzebnych reguł Keep oznacza, że R8 może zrobić więcej.

Poprawa wydajności przewijania dzięki profilom podstawowym

Aby jeszcze bardziej poprawić wrażenia użytkowników, firma Monzo wdrożyła profile podstawowe, które są ukierunkowane na wydajność przewijania i renderowania na głównym kanale. Dzięki tej strategii najczęstsze ścieżki użytkowników – otwieranie aplikacji i przewijanie kanału – były w pełni zoptymalizowane. Wpływ na renderowanie był znaczny: 90 centyl wydajności przewijania wzrósł o 71%, a 95 centyl o 87%. Teraz przewijanie aplikacji jest płynniejsze niż wcześniej.

Monzo włączył tę funkcję do procesu publikowania, aby z czasem utrzymać te ulepszenia. „Generowanie profilu bazowego uruchamiamy w każdy dzień roboczy (przed uruchomieniem kompilacji nocnych) i po zakończeniu procesu zatwierdzamy najnowsze zmiany” – wyjaśnia Neumayer.

Nadążanie za nowoczesnym rozwojem Androida

Przykład Monzo pokazuje, co można osiągnąć, gdy korzysta się z najnowszych rekomendacji dotyczących narzędzi do kompilacji Androida. Starsze aplikacje często mają problemy ze złożonym wykorzystaniem odbicia, ale Monzo uznał przejście za proste dzięki odpowiedniemu udokumentowaniu reguł Keep. „Zawsze dodajemy komentarz wyjaśniający, dlaczego obowiązują reguły przechowywania, dzięki czemu wiemy, kiedy można je bezpiecznie usunąć” – zauważa Neumayer.

Jaką radę ma Neumayer dla innych zespołów? Regularnie sprawdzaj swoje działania pod kątem aktualnych standardów: „Zapoznaj się z najnowszymi rekomendacjami Google dotyczącymi wydajności aplikacji i sprawdź, czy stosujesz wszystkie najnowsze porady”.

Aby rozpocząć i dowiedzieć się więcej o R8, wejdź na stronę https://d.android.com/r8

Autor:

Czytaj dalej