Styles werden standardmäßig in der Layout- und Zeichenphase von Compose angewendet. So müssen keine lambdabasierten Modifizierer erstellt werden, da die Kompositionsphase bei Styles immer übersprungen wird.
Die Leistungssteigerungen im Vergleich zu Anpassungen beruhen auf drei primären Optimierungen:
- Phasenverschiebung: Bei Stilen wird oft die Draw-Phase anvisiert. Wenn sich ein Wert ändert, wird in Compose nur die betroffene Phase (z.B. „Redraw“) ungültig gemacht, anstatt eine vollständige Neukomposition oder ein vollständiges Neulayout auszulösen.
- Lazy Allocation: Bei Styles wird die Zuweisung von Animationsressourcen aufgeschoben, bis eine Animation tatsächlich beginnt. Dadurch wird der Aufwand bei der ersten Komposition reduziert.
- Geringerer Objekt-Overhead: Bei verketteten Modifizierern wird für jede Eigenschaft (z.B. „padding“, „border“) ein Objekt zugewiesen. Für Stile wird ein einzelnes Lambda verwendet, um mehrere Eigenschaften anzuwenden. Dadurch werden Arbeitsspeicherzuweisungen erheblich reduziert. Wenn ein Stil in einem Theme definiert ist, wird diese Lambda-Funktion für alle Komponenten freigegeben, die dieses Theme verwenden.
Die folgende Tabelle zeigt beispielhafte Ergebnisse eines internen Leistungsbenchmarks für Compose 1.11.0-alpha06 von Styles im Vergleich zu einer Implementierung in Compose ohne Styles.
Der basic_box_border_change-Test zeigt die Stärke des Stilsystems beim Vermeiden der Zuweisung mehrerer Modifikatorobjekte bei Attributaktualisierungen. Dies führt zu einer massiven Reduzierung der Zuweisungen um etwa 77% und einer Reduzierung der Zeit um etwa 59 %.
Testmethode |
Beschreibung |
Zeitänderung |
Änderung der Zuweisung |
Schaltet die Rahmenfarbe eines |
-59,91% |
-77,22% |
|
Vergleicht stilbasierte Hover-/Fokus-/Drückstatus mit der manuellen Erfassung von Interaktionsstatus. |
-5,24% |
–14,72% |
|
Misst die anfängliche Komposition und das Layout eines |
–4,78% |
-6,60% |
|
Rendert fünf |
+0,62% |
+2,41% |
|
Vergleich zwischen dem Festlegen der Textfarbe über einen Stil und der Verwendung von |
+5,86% |
+9,82% |