Stiller, Akıllı Yazma'nın düzen ve çizim aşamasında çalışacak şekilde tasarlanmıştır. Bu sayede, Styles her zaman kompozisyon aşamasını atladığı için lambda tabanlı değiştiriciler oluşturmaya gerek kalmaz.
Değiştiricilere kıyasla performans artışları üç temel optimizasyondan kaynaklanır:
- Aşamaları değiştirme: Stiller genellikle Çizim aşamasını hedefler. Bir değer değiştiğinde Compose, tam bir yeniden oluşturma veya yeniden düzenleme tetiklemek yerine yalnızca etkilenen aşamayı (ör. yeniden çizme) geçersiz kılar.
- Geç ayırma: Stiller, animasyon kaynak ayırmayı animasyon gerçekten başlayana kadar erteler. Bu sayede ilk beste sırasında gereken iş miktarı azalır.
- Nesne yükü azaltıldı: Zincirleme değiştiriciler, her özellik için bir nesne ayırır (ör. dolgu, kenarlık). Stiller, birden fazla özelliği uygulamak için tek bir lambda kullanır ve bellek ayırmalarını önemli ölçüde azaltır. Bir temada stil tanımlanmışsa bu lambda, temayı kullanan tüm bileşenlerde paylaşılır.
Aşağıdaki tabloda, Styles'ın Compose 1.11.0-alpha06 sürümü için dahili performans karşılaştırmalarının, Styles'ın kullanılmadığı bir Compose uygulamasıyla karşılaştırıldığında elde edilen örnek sonuçları gösterilmektedir.
basic_box_border_change testi, stil sisteminin özellik güncellemeleri sırasında birden fazla değiştirici nesnenin ayrılmasını önleme konusundaki gücünü vurguluyor. Bu sayede, ayırmalarda yaklaşık% 77 ve sürede yaklaşık% 59 oranında azalma elde edildi.
Test Yöntemi |
Açıklama |
Saat değişikliği |
Ayırma Değişikliği |
Güncelleme performansını ölçmek için bir |
-%59,91 |
-%77,22 |
|
Stile dayalı fareyle üzerine gelme/odaklanma/basma durumlarını manuel etkileşim durumu koleksiyonuyla karşılaştırır. |
-%5,24 |
-%14,72 |
|
Beş zincirli değiştiriciyle |
-%4,78 |
-%6,60 |
|
Sabit kodlanmış dizelerle beş |
+%0,62 |
+%2,41 |
|
Metin rengini bir stil aracılığıyla ayarlama ile |
+%5,86 |
+%9,82 |