Studia przypadków

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

Czas czytania: 2 minuty

Monzo to brytyjski bank cyfrowy, który ma 15 milionów klientów i stale się rozwija. W miarę rozwoju 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ą skomplikowanych prac programistycznych.

Osiąganie lepszych wyników dzięki pełnemu trybowi R8

Firma Monzo uznała tryb pełny R8 za łatwe do wdrożenia rozwiązanie, które warto wypróbować. Okazało się ono skuteczne i poprawiło wydajność w każdym aspekcie:

  • Niezawodność uruchamiania: uruchamianie „na zimno” zostało ulepszone o 30%, uruchamianie „na ciepło” o 24%, a uruchamianie 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 przestarzałego 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 należy pozostawić 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 bazowe, które są ukierunkowane na wydajność przewijania i renderowania w 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: wydajność przewijania P90 wzrosła o 71%, a wydajność przewijania P95 – o 87%. Teraz przewijanie aplikacji jest płynniejsze niż wcześniej.

Monzo włączył tę funkcję do procesu publikowania, aby utrzymać te ulepszenia na stałe. „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 na Androida. Starsze aplikacje często mają problemy ze złożonymi przypadkami użycia odbicia, ale Monzo uznało 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 praktyki 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

Autorzy:
Czytaj dalej