Leistungsvorteile durch Stile

Styles werden in der Layout- und Zeichenphase von Compose verwendet. Dadurch müssen keine Lambda-basierten Modifikatoren erstellt werden, da Styles die Kompositionsphase immer überspringen.

Phasen von Compose und Ausführung von Styles
Abbildung 1. Phasen von Compose und wo Styles ausgeführt werden.

Die Leistungsverbesserungen gegenüber Modifikatoren sind auf drei Hauptoptimierungen zurückzuführen:

  • Phasenverschiebung: Styles zielen oft auf die Zeichenphase ab. Wenn sich ein Wert ändert, werden in Compose nur die betroffene Phase (z.B. „Neu zeichnen“) ungültig gemacht, anstatt eine vollständige Neukomposition oder ein neues Layout auszulösen.
  • Lazy Allocation: Bei Styles wird die Zuweisung von Animationsressourcen verzögert, bis eine Animation tatsächlich beginnt. Dadurch wird der Aufwand bei der anfänglichen Komposition reduziert.
  • Reduzierter Objekt-Overhead: Verkettete Modifikatoren weisen für jede Eigenschaft ein Objekt zu (z.B. Padding, Rahmen). Styles verwenden eine einzelne Lambda-Funktion, um mehrere Eigenschaften anzuwenden, wodurch die Arbeitsspeicherzuweisungen erheblich reduziert werden. Wenn ein Style in einem Design definiert ist, wird diese Lambda-Funktion für alle Komponenten freigegeben, die dieses Design verwenden.

Die folgende Tabelle zeigt illustrative Ergebnisse interner Leistungs benchmarks für Compose 1.11.0-alpha06 von Styles im Vergleich zu einer Implementierung in Compose ohne Styles.

Der Test basic_box_border_change unterstreicht die Stärke des Style-Systems, da die Zuweisung mehrerer Modifikatorobjekte bei Eigenschaftsaktualisierungen vermieden wird. Dies führt zu einer massiven Reduzierung der Zuweisungen um ~77% und einer Reduzierung der Zeit um ~59 %.

Testmethode

Beschreibung

Zeitänderung

Änderung der Zuweisung

basic_box_border_change

Ändert die Rahmenfarbe eines Box-Elements, um die Aktualisierungsleistung zu messen.

–59,91%

–77,22%

input_state_basic_box

Vergleicht Style-basierte Hover-, Fokus- und Druckzustände mit der manuellen Erfassung von Interaktionszuständen.

–5,24%

–14,72%

basic_box

Misst die anfängliche Komposition und das Layout eines Box-Elements mit fünf verketteten Modifikatoren.

–4,78%

–6,60%

basic_text

Rendert fünf BasicText-Komponenten mit fest codierten Strings.

+0,62%

+2,41%

basic_text_provided_color

Vergleicht das Festlegen der Textfarbe über einen Style mit der Verwendung von CompositionLocalProvider.

+5,86%

+9,82%