Stiller, Akıllı Yazma'nın düzen ve çizim aşamasında çalışacak şekilde tasarlanmıştır. Bu sayede, lambda tabanlı değiştiriciler oluşturmaya gerek kalmaz. Çünkü stiller her zaman kompozisyon aşamasını atlar.
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ç tahsis: Stiller, animasyon kaynak tahsisini 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ımlanırsa 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üne ait dahili performans karşılaştırmalarının, Styles'ın kullanılmadığı bir Compose uygulamasındaki sonuçlarla karşılaştırıldığı ö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, sürede ise yaklaşık% 59 azalma elde edildi.
Test Yöntemi |
Açıklama |
Saat Değişikliği |
Tahsis 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 stil aracılığıyla ayarlama ile |
+%5,86 |
+%9,82 |