Wie das Android Kalender-Team mit Baseline-Profilen App-Start- und -Verzögerungen verbesserte

Baseline-Profile verbessern die Geschwindigkeit der Codeausführung um bis zu 30 %, indem sie Interpreter- und Just-in-time-Kompilierungsschritte (JIT) für häufige Nutzeraktionen vermeiden. Mit Baseline-Profilen können Sie die Nutzeraktionen auswählen, die Sie optimieren möchten. So können Sie beispielsweise den App-Start verbessern und Ruckeln reduzieren. Das wiederum führt zu besseren Geschäftsmesswerten wie Nutzerbindung und Bewertungen. Weitere Informationen zu Baseline Profilen.

Das Android Calendar-Team hat Baseline-Profile implementiert und eine Verbesserung der App Startzeit um etwa 20% und eine Reduzierung der langsamen oder eingefrorenen Frames um etwa 50% festgestellt. Hier erfahren Sie, wie sie diese Leistungssteigerungen erreicht haben – von der Entscheidung für Baseline-Profile bis hin zur Messung der Auswirkungen.

Cloud-Profile im Vergleich zu Baseline-Profilen

Das Android Calendar-Team hat bereits Cloud Profile verwendet. Das ist eine weitere Methode zur profilgesteuerten Optimierung (Profile Guided Optimization, PGO), die auf realen Nutzer interaktionen mit der App basiert. Hier ein Vergleich zwischen Cloud-Profilen und Baseline-Profilen:

Profiltyp Einrichten Enthaltene Nutzeraktionen Funktioniert am besten, wenn die Nutzerbasis Auswirkungen Unterstützte Android-Versionen

Cloud-Profile

Standardmäßig aktiviert

Wird automatisch anhand von realen Nutzerdaten ausgewählt

Groß

Innerhalb weniger Tage

Android 9 (API-Level 28) und höher

Baseline-Profile

Von Ihnen konfiguriert

Von Ihnen ausgewählt

Alle Größen

Sofort

Android 7 (API-Level 24) und höher

Ein wichtiger Grund für die Entscheidung des Android Calendar-Teams, Baseline-Profile in den Code aufzunehmen, war die Umstellung auf einen schnelleren, wöchentlichen Release-Zyklus. Cloud-Profile bieten zwar erhebliche Leistungssteigerungen, es dauert jedoch ein bis zwei Tage nach dem App-Start, bis sie ihre maximale Wirkung entfalten, da sie auf der Aggregation von realen Nutzerdaten basieren. Durch die Ergänzung von Cloud-Profilen mit Baseline Profilen haben Nutzer mehr Zeit, die Leistungsverbesserungen zu erleben , bevor die nächste App-Version eingeführt wird.

Außerdem war es für das Android Calendar-Team wichtig, auswählen zu können, welche kritischen Nutzeraktionen (Critical User Journeys, CUJs) im Profil enthalten sind. Das ist mit Baseline-Profilen möglich.

Im Allgemeinen empfehlen wir, zusätzlich zu den standardmäßig aktivierten Cloud-Profilen auch Baseline-Profile zu verwenden, um die bestmögliche Leistung zu erzielen.

Enthaltene Nutzeraktionen

Das Android Calendar-Team hat zwei CUJs in seine Baseline-Profile aufgenommen:

  • Öffnen der App in der Terminplanansicht: Das ist die Standardansicht. Sie sollte daher für Nutzer optimiert werden, die die App zum ersten Mal verwenden oder die Standardeinstellungen nicht ändern.
  • Öffnen der App in der Monatsansicht: Das ist die von vielen Nutzern gewählte Ansicht, basierend auf Nutzer daten. Mit Tools wie Firebase können Sie nachverfolgen, wie Nutzer Ihre App verwenden.

Im Allgemeinen sollten Sie die CUJs hinzufügen, die für das Unternehmen rentabel sind (falls zutreffend), und die häufigsten CUJs. Weitere Informationen zur Auswahl von CUJs zur Optimierung finden Sie unter Was sollte enthalten sein.

Implementierung

Das Android Calendar-Team verwendet einen internen Wrapper für die Jetpack Macrobenchmark-Bibliothek , um Baseline-Profile zu generieren. So lässt sich die Bibliothek einfacher in interne Tools integrieren und die Skalierbarkeit wird verbessert.

Hier ist die Macrobenchmark-Testkonfiguration zum Öffnen der App in der Terminplan ansicht:

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

Ersetzen Sie Folgendes:

  • PACKAGE_NAME: Der Paketname der App, für die Sie Baseline-Profile generieren möchten.

Auswirkungen mit kontrollierten Releases messen

Da Baseline-Profile eng mit der APK verknüpft sind, mit der sie ausgeliefert werden, und vor dem Ausführen Ihrer App eingebunden werden, ist es nicht möglich, einen standardmäßigen A/B Test durchzuführen, um ihre Auswirkungen zu ermitteln. Das Android Calendar-Team konnte jedoch mit kontrollierten Releases genaue Messungen der Auswirkungen erhalten. Dabei wird die neue App-Version nur für eine Teilmenge der Nutzer freigegeben und mit Nutzern verglichen, die eine Version verwenden, die der vorherigen Version ähnelt.

Mit Baseline-Profilen wurden in mehreren Bereichen sofort erhebliche Verbesserungen erzielt. Diese Statistiken sind über eine Vielzahl von Geräten und alle Nutzer hinweg aggregiert. Nutzer, die die App in der Terminplan- und Monatsansicht starten, profitieren wahrscheinlich am meisten. Aber auch andere Nutzer profitieren von der Optimierung gemeinsamer Prozesse wie dem Laden von Kalenderdaten aus der Datenbank.

  • Die Latenz für den interaktiven App-Start (häufigstes Szenario) sank von 775 ms auf 644 ms (17%)
  • Die Latenz für den Kaltstart sank von 1.058 ms auf 901 ms (15%)
  • Die Latenz für den Warmstart sank von 453 ms auf 378 ms (17%)
  • Die Latenz für den Ruckler-Frame sank in der Terminplan- und Monatsansicht um 42–60 %

Wenn Sie Cloud-Profile in Verbindung mit Baseline Profilen verwenden, werden die Verbesserungen in der ersten Woche wahrscheinlich etwas geringer ausfallen, da Cloud-Profile generiert werden. Sie sollten jedoch weiterhin erhebliche Leistungssteigerungen durch Baseline-Profile zusätzlich zu anderen Optimierungen feststellen.

Weitere Informationen zu den Tools und Funktionen finden Sie in den folgenden Ressourcen: