So hat Reddit den R8-Optimierer für erhebliche Leistungsverbesserungen eingesetzt
Lesezeit: 4 Minuten
In der heutigen Welt der mobilen Anwendungen ist eine nahtlose Nutzererfahrung nicht nur eine Funktion, sondern eine Notwendigkeit. Lange Ladezeiten, nicht reagierende Oberflächen und Instabilität können erhebliche Hindernisse für die Einbindung und Bindung von Nutzern darstellen. Bei der Zusammenarbeit mit dem Android Developer Relations-Team hat das Engineering-Team von Reddit den App Performance Score verwendet, um die App zu bewerten. Nach der Leistungsbewertung wurde ein erhebliches Verbesserungspotenzial festgestellt. Das Team beschloss, die erforderlichen Schritte zu unternehmen, um die volle Leistung von R8, dem Android-App-Optimierer, zu nutzen. Diese Initiative führte zu bemerkenswerten Verbesserungen bei den Startzeiten, zu weniger langsamen oder eingefrorenen Frames und ANR-Fehlern sowie zu einer allgemeinen Steigerung der Google Play Store-Bewertungen. In dieser Fallstudie wird aufgeschlüsselt, wie Reddit diese beeindruckenden Ergebnisse erzielt hat.
So hat der R8-Optimierer Reddit geholfen
Der R8-Optimierer ist ein grundlegendes Tool zur Leistungsoptimierung unter Android. Es sind verschiedene Schritte erforderlich, um die App-Leistung zu verbessern.Sehen wir uns die wichtigsten an.
- Tree Shaking ist der wichtigste Schritt, um die Größe einer App zu reduzieren. Hier wird nicht verwendeter Code aus App-Abhängigkeiten und der App selbst entfernt.
- Beim Methoden-Inlining werden Methodenaufrufe durch den tatsächlichen Code ersetzt, wodurch die App leistungsfähiger wird.
- Klassen werden zusammengeführt und es werden andere Strategien angewendet, um den Code kompakter zu machen. An diesem Punkt geht es nicht mehr um die Lesbarkeit des Quellcodes, sondern darum, dass der kompilierte Code schnell funktioniert. Abstraktionen wie Schnittstellen oder Klassenhierarchien spielen hier also keine Rolle und werden entfernt.
- Bei der Kennungs-Minifizierung werden die Namen von Klassen, Feldern und Methoden in kürzere, bedeutungslose Namen geändert. Statt
MyDataModelerhalten Sie also möglicherweise eine Klasse namens „a“. - Beim Entfernen nicht verwendeter Ressourcen werden nicht verwendete Ressourcen wie XML-Dateien und Drawables entfernt, um die App-Größe weiter zu verringern.
Wichtige Phasen der R8-Optimierung
Von harten Daten zur Nutzerzufriedenheit: Erfolg in der Produktion identifizieren
Reddit saw improved performance results immediately after a new version of the app was rolled out to users.Mithilfe von Android Vitals und Crashlytics konnte Reddit Leistungsmesswerte auf echten Geräten mit tatsächlichen Nutzern erfassen und so die Neuveröffentlichung mit früheren Versionen vergleichen.
So hat R8 die App-Leistung von Reddit verbessert
Das Team stellte einen 40% schnelleren Kaltstart, eine Reduzierung der „App antwortet nicht“-Fehler (ANR) um 30% , eine Verbesserung des Frame-Renderings um 25% und eine Reduzierung der App-Größe um 14% fest.
Diese Verbesserungen sind entscheidend für die Nutzerzufriedenheit. Ein schnellerer Start bedeutet weniger Wartezeit und einen schnelleren Zugriff auf Inhalte. Weniger ANRs führen zu einer stabileren und zuverlässigeren App, was die Nutzerzufriedenheit steigert. Durch die flüssigere Frame-Wiedergabe wird die Verzögerung der Benutzeroberfläche reduziert, sodass sich das Scrollen und die Animationen flüssig und reaktionsschnell anfühlen. Diese positiven technischen Auswirkungen waren auch in der Nutzerstimmung deutlich zu erkennen.
Indikatoren für die Nutzerzufriedenheit, die den Erfolg der Optimierung belegen, waren direkt im Google Play Store sichtbar. Nach der Einführung der R8-optimierten Version stellten sie eine deutliche und positive Veränderung der Nutzerstimmung und ‑interaktionen fest.
Drew Heavner: „Enabling R8's full potential tool less than 2 weeks“
Das ist umso beeindruckender, da es mit einem konzentrierten Aufwand erreicht wurde. Drew Heavner, Staff Software Engineer bei Reddit, der an dieser Initiative mitgearbeitet hat, stellte fest, dass die Implementierung der Änderungen, die das volle Potenzial von R8 ermöglichen, weniger als zwei Wochen dauerte.
Leistungssteigerungen bestätigen: Makrobenchmarks im Detail
Nachdem das Engineering-Team von Reddit und das Android Developer Relations-Team von Google die erheblichen Verbesserungen in der Praxis beobachtet hatten, führten sie detaillierte Benchmarks durch, um die Verbesserungen wissenschaftlich zu bestätigen und mit weiteren Optimierungen zu experimentieren. Für diese Analyse stellte das Engineering-Team von Reddit zwei Versionen seiner App zur Verfügung: eine ohne Optimierungen und eine, in der R8 und zwei weitere grundlegende Tools zur Leistungsoptimierung angewendet wurden: Baseline-Profile und Startprofile.
Mit Baseline-Profilen werden die Just-in-time-Kompilierungsschritte (JIT) effektiv von Nutzergeräten auf Entwicklercomputer verlagert. Der generierte AOT-kompilierte Code (Ahead Of Time) hat sich als nützlich erwiesen, um sowohl die Startzeit als auch Rendering-Probleme zu reduzieren.
Wenn eine App verpackt wird, nimmt der D8-Dexer Klassen und Methoden und erstellt die classes.dex-Dateien Ihrer App. Wenn ein Nutzer die App öffnet, werden diese DEX-Dateien nacheinander geladen, bis die App gestartet werden kann. Wenn Sie ein Startprofil bereitstellen, weiß d8, welche Klassen und Methoden in die ersten classes.dex-Dateien gepackt werden sollen. Durch diese Struktur kann die App weniger Dateien laden, was die Startgeschwindigkeit verbessert.
Jetpack Macrobenchmark war das wichtigste Tool in dieser Phase. Damit konnten Nutzerinteraktionen in einer kontrollierten Umgebung präzise gemessen werden. Um einen typischen Nutzerablauf zu simulieren, verwendeten sie die UIAutomator API, um einen Test zu erstellen, bei dem die App geöffnet, dreimal nach unten und dann wieder nach oben gescrollt wurde.
Am Ende war das alles, was zum Schreiben des Benchmarks erforderlich war:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}Die Benchmark-Daten bestätigten die Beobachtungen im Feld und lieferten tiefere Einblicke. Die vollständig optimierte App startete 55% schneller und Nutzer konnten 18% früher mit dem Browsen beginnen. Bei der optimierten App wurde auch eine Reduzierung der Just-in-Time-Kompilierung (JIT) um zwei Drittel und eine Verkürzung der JIT-Kompilierungszeit um ein Drittel beobachtet. Das Rendern von Frames wurde verbessert, sodass im Vergleich zum Benchmark-Kaufprozess 19% mehr Frames gerendert wurden. Schließlich wurde die Größe der App um mehr als ein Drittel reduziert.
Verbesserungen der Gesamtleistung von Reddit
Sie können die Just-in-time-Kompilierung mit einem benutzerdefinierten Macrobenchmark-Messwert für den Trace-Abschnitt so messen:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Die Technologie hinter der Transformation aktivieren: R8
Wenn Sie R8 im vollständigen Modus aktivieren möchten, konfigurieren Sie die Datei app/build.gradle.kts, indem Sie minifyEnabled und shrinkResources für den Release-Build-Typ auf true setzen.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}Auf diesen Schritt muss ein ganzheitlicher End-to-End-Test folgen, da Leistungsoptimierungen zu unerwünschtem Verhalten führen können, das Sie besser erkennen, bevor Ihre Nutzer es tun.
Wie bereits weiter oben in diesem Artikel gezeigt, führt R8 umfangreiche Optimierungen durch, um die Leistungssteigerung zu maximieren. R8 nimmt erhebliche Änderungen am Code vor, z. B. durch Umbenennen, Verschieben und Entfernen von Klassen, Feldern und Methoden. Wenn Sie feststellen, dass diese Änderungen Fehler verursachen, müssen Sie angeben, welche Teile des Codes nicht von R8 geändert werden sollen. Dazu deklarieren Sie diese in Keep-Regeln.
Beispiel von Reddit in Ihrer App verwenden
Der Erfolg von Reddit mit R8 ist eine aussagekräftige Fallstudie für jedes Entwicklungsteam, das die Leistung seiner App mit geringem Aufwand deutlich verbessern möchte. Die direkte Korrelation zwischen den technischen Verbesserungen und der anschließenden Steigerung der Nutzerzufriedenheit unterstreicht den Wert der Leistungsoptimierung.
Wenn andere Entwickler dem in dieser Fallstudie beschriebenen Konzept folgen – Tools wie den App Performance Score verwenden, um Optimierungsmöglichkeiten zu ermitteln, das volle Optimierungspotenzial von R8 nutzen, Daten aus der Praxis im Blick behalten und Benchmarks verwenden, um ihr Wissen zu bestätigen und zu vertiefen –, können sie ähnliche Verbesserungen erzielen.
Wenn Sie R8 in Ihrer eigenen App verwenden möchten, finden Sie in der aktualisierten offiziellen Dokumentation und Anleitung Informationen zum Aktivieren, Konfigurieren und Beheben von Problemen mit dem R8-Optimierer.
-
FallstudienMonzo ist eine britische Digitalbank mit 15 Millionen Kunden. Als die App skaliert wurde, stellte das Entwicklerteam fest, dass die Startzeit der App ein kritischer Bereich war, der verbessert werden musste. Sie befürchteten jedoch, dass dies erhebliche Änderungen an ihrer Codebasis erfordern würde.
Ben Weiss, Tracy Agyemang • Lesezeit: 2 Minuten -
FallstudienDas Team entwickelte eine KI-native UI-Codebasis, die 50% kleiner als die ursprüngliche Implementierung ist. Gleichzeitig konnte die Ausführungszeit des KI-Agenten um 35 %, die Anzahl der Engineer-Agent-Austausche um 32% und die Tokenkosten um 33% gesenkt werden.
Pavlo Stavytskyi, Rebecca Franks • Lesezeit: 11 Minuten -
FallstudienWhatsApp ist die weltweit größte Messaging-Plattform mit Milliarden von Nutzern weltweit. Es ist das Standardkommunikationstool für Menschen in verschiedenen Regionen und verbindet Nutzer über private, zuverlässige und sichere Nachrichten.
Niharika Arora, Tracy Agyemang, Mayank Jain • Lesezeit: 8 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.