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.
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 |
Ändert die Rahmenfarbe eines |
–59,91% |
–77,22% |
|
Vergleicht Style-basierte Hover-, Fokus- und Druckzustände mit der manuellen Erfassung von Interaktionszuständen. |
–5,24% |
–14,72% |
|
Misst die anfängliche Komposition und das Layout eines |
–4,78% |
–6,60% |
|
Rendert fünf |
+0,62% |
+2,41% |
|
Vergleicht das Festlegen der Textfarbe über einen Style mit der Verwendung von |
+5,86% |
+9,82% |