Jak Reddit wykorzystał optymalizator R8 do uzyskania znacznej poprawy wydajności
Czas czytania: 4 min
W dzisiejszym świecie aplikacji mobilnych bezproblemowa obsługa to nie tylko funkcja, ale konieczność. Powolne wczytywanie, brak reakcji interfejsu i niestabilność mogą być znaczącymi przeszkodami w zaangażowaniu i utrzymaniu użytkowników. Podczas współpracy z zespołem ds. relacji z deweloperami Androida zespół inżynierów z Reddita wykorzystał wynik skuteczności aplikacji do oceny swojej aplikacji. Po ocenie wydajności zidentyfikowali znaczny potencjał poprawy i zdecydowali się podjąć kroki, aby w pełni wykorzystać możliwości R8, optymalizatora aplikacji na Androida. Ta ukierunkowana inicjatywa doprowadziła do znacznej poprawy czasu uruchamiania, zmniejszenia liczby powolnych lub zamrożonych klatek i błędów ANR oraz ogólnego wzrostu ocen w Sklepie Play. To studium przypadku pokazuje, jak Reddit osiągnął te imponujące wyniki.
Jak optymalizator R8 pomógł Redditowi
Optymalizator R8 to podstawowe narzędzie do optymalizacji wydajności na Androidzie. Poprawa wydajności aplikacji wymaga podjęcia różnych działań.Przyjrzyjmy się pokrótce tym, które mają największy wpływ.
- Usuwanie nieużywanych funkcji to najważniejszy krok w zmniejszaniu rozmiaru aplikacji. W tym przypadku usuwany jest nieużywany kod z zależności aplikacji i samej aplikacji.
- Wstawianie kodu metody zastępuje wywołania metod rzeczywistym kodem, co zwiększa wydajność aplikacji.
- Stosowane są scalanie klas i inne strategie, aby kod był bardziej zwarty. W tym momencie nie chodzi już o czytelność kodu źródłowego, ale o szybkie działanie skompilowanego kodu. Abstrakcje, takie jak interfejsy czy hierarchie klas, nie mają tu znaczenia i zostaną usunięte.
- Minimalizacja identyfikatorów zmienia nazwy klas, pól i metod na krótsze, bez znaczenia. Zamiast
MyDataModelmożesz otrzymać klasę o nazwie a. - Zmniejszanie zasobów usuwa nieużywane zasoby, takie jak pliki XML i elementy rysunkowe, aby jeszcze bardziej zmniejszyć rozmiar aplikacji.
Główne etapy optymalizacji R8
Od twardych danych po zadowolenie użytkowników: określanie sukcesu w produkcji
Po wdrożeniu nowej wersji aplikacji użytkownicy Reddita od razu zauważyli poprawę wydajności. Dzięki korzystaniu z Android Vitals i Crashlytics zespół Reddit mógł rejestrować dane o wydajności na prawdziwych urządzeniach z rzeczywistymi użytkownikami, co pozwoliło mu porównać nową wersję z poprzednimi.
Jak R8 poprawiło wydajność aplikacji Reddit
Zespół zaobserwował 40% szybsze uruchamianie „na zimno”, 30% mniej błędów typu „Aplikacja nie odpowiada” (ANR), 25% lepsze renderowanie klatek i 14% mniejszy rozmiar aplikacji.
Te ulepszenia są kluczowe dla zadowolenia użytkowników. Szybsze uruchamianie oznacza krótsze oczekiwanie i szybszy dostęp do treści. Mniejsza liczba błędów ANR oznacza bardziej stabilną i niezawodną aplikację, co zmniejsza frustrację użytkowników. Płynniejsze renderowanie klatek eliminuje zacinanie się interfejsu, dzięki czemu przewijanie i animacje są płynne i szybko reagują na działania użytkownika. Ten pozytywny wpływ techniczny był też wyraźnie widoczny w opiniach użytkowników.
Wskaźniki zadowolenia użytkowników z optymalizacji były bezpośrednio widoczne w Sklepie Google Play. Po wdrożeniu wersji zoptymalizowanej pod kątem R8 zespół odnotował znaczącą i pozytywną zmianę w opiniach użytkowników i ich zaangażowaniu.
Drew Heavner: „Włączenie pełnego potencjału narzędzia R8 w mniej niż 2 tygodnie”
Co najważniejsze, udało się to osiągnąć dzięki skoncentrowanym wysiłkom. Drew Heavner, inżynier oprogramowania w Reddit, który pracował nad tą inicjatywą, zauważył, że wprowadzenie zmian umożliwiających pełne wykorzystanie potencjału R8 zajęło mniej niż 2 tygodnie.
Potwierdzanie korzyści: szczegółowe omówienie z użyciem testów porównawczych
Po zaobserwowaniu znacznych ulepszeń w rzeczywistych warunkach zespół inżynierów Reddit i zespół ds. relacji z deweloperami Androida w Google przeprowadzili szczegółowe testy porównawcze, aby naukowo potwierdzić uzyskane korzyści i przeprowadzić eksperymenty z dalszą optymalizacją. Na potrzeby tej analizy zespół inżynierów Reddit udostępnił 2 wersje aplikacji: jedną bez optymalizacji i drugą, w której zastosowano R8 oraz 2 inne podstawowe narzędzia do optymalizacji wydajności: profile podstawowe i profile uruchamiania.
Profile podstawowe skutecznie przenoszą etapy kompilacji JIT (Just in Time) z urządzeń użytkowników na komputery deweloperów. Wygenerowany skompilowany kod AOT (Ahead Of Time) skraca czas uruchamiania i rozwiązywania problemów z renderowaniem.
Podczas pakowania aplikacji program d8 dexer pobiera klasy i metody oraz tworzy pliki classes.dex aplikacji. Gdy użytkownik otworzy aplikację, te pliki DEX są ładowane jeden po drugim, aż aplikacja będzie mogła się uruchomić. Dzięki podaniu profilu startupu informujesz kompilator d8, które klasy i metody mają być spakowane w pierwszych plikach classes.dex. Dzięki tej strukturze aplikacja wczytuje mniej plików, co z kolei przyspiesza jej uruchamianie.
Jetpack Macrobenchmark to podstawowe narzędzie w tym etapie, które umożliwia precyzyjne pomiary interakcji użytkowników w kontrolowanym środowisku. Aby zasymulować typową ścieżkę użytkownika, zespół użył interfejsu UIAutomator API do utworzenia testu, który otwierał aplikację, przewijał ją 3 razy w dół, a potem przewijał z powrotem do góry.
Ostatecznie do napisania testu porównawczego wystarczyło to:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}Dane porównawcze potwierdziły obserwacje terenowe i dostarczyły bardziej szczegółowych informacji. W pełni zoptymalizowana aplikacja uruchamiała się o 55% szybciej, a użytkownicy mogli zacząć przeglądać treści o 18% wcześniej. Zoptymalizowana aplikacja wykazała też o 2/3 mniejszą liczbę wystąpień kompilacji JIT i o 1/3 krótszy czas kompilacji JIT. Renderowanie klatek zostało ulepszone, dzięki czemu w porównaniu z ścieżką użytkownika w przypadku testu porównawczego wyrenderowano o 19% więcej klatek. Ostatecznie rozmiar aplikacji zmniejszył się o ponad jedną trzecią.
Ogólne zwiększenie skuteczności Reddit
Czas kompilacji JIT możesz zmierzyć za pomocą niestandardowych danych sekcji śledzenia Macrobenchmark, takich jak te:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Włączanie technologii, która stoi za transformacją: R8
Aby włączyć R8 w trybie pełnym, skonfiguruj plik app/build.gradle.kts, ustawiając minifyEnabled i shrinkResources na true w rodzaju kompilacji do publikacji.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}Po tym kroku należy przeprowadzić kompleksowe testy, ponieważ optymalizacja wydajności może prowadzić do niepożądanych zachowań, które lepiej wykryć przed użytkownikami.
Jak wspomnieliśmy wcześniej w tym artykule, R8 przeprowadza szeroko zakrojone optymalizacje, aby zmaksymalizować korzyści związane ze skutecznością. R8 wprowadza istotne zmiany w kodzie, w tym zmienia nazwy klas, pól i metod, przenosi je i usuwa. Jeśli zauważysz, że te modyfikacje powodują błędy, musisz określić, których części kodu R8 nie powinien modyfikować, deklarując je w regułach zachowywania.
Wzorowanie się na aplikacji Reddit
Sukces Reddit z R8 to doskonały przykład dla każdego zespołu deweloperskiego, który chce w prosty sposób znacząco poprawić wydajność aplikacji. Bezpośrednia korelacja między ulepszeniami technicznymi a późniejszym wzrostem zadowolenia użytkowników podkreśla wartość optymalizacji wydajności.
Postępując zgodnie z planem przedstawionym w tym studium przypadku – korzystając z narzędzi takich jak Wynik wydajności aplikacji do identyfikowania możliwości, włączając pełny potencjał optymalizacji R8, monitorując dane z rzeczywistych warunków i korzystając z wartości referencyjnych do potwierdzania i pogłębiania wiedzy – inni deweloperzy mogą osiągnąć podobne korzyści.
Aby zacząć korzystać z R8 w swojej aplikacji, zapoznaj się z aktualną oficjalną dokumentacją i wskazówkami dotyczącymi włączania, konfigurowania i rozwiązywania problemów z optymalizatorem R8.
-
Studia przypadkówMonzo 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ł, że czas uruchamiania aplikacji jest kluczowym obszarem wymagającym poprawy, ale obawiał się, że będzie to wymagało znaczących zmian w bazie kodu.
Ben Weiss, Tracy Agyemang • Czas czytania: 2 minuty -
Studia przypadkówWhatsApp to największa na świecie platforma do przesyłania wiadomości, z której korzystają miliardy użytkowników na całym świecie. Jest to domyślne narzędzie komunikacyjne dla osób z różnych regionów, które umożliwia użytkownikom prywatną, niezawodną i bezpieczną komunikację.
Niharika Arora, Tracy Agyemang, Mayank Jain • Czas czytania: 8 minut -
Studia przypadkówMisją Tindera jest wspieranie i inspirowanie prawdziwych relacji poprzez ułatwianie i uprzyjemnianie poznawania nowych osób każdemu pokoleniu singli.
Ajesh Pai, Ulises Uriel Verduzco Díaz , Tracy Agyemang • Czas czytania: 4 min
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.