Stillerle ilgili performans avantajları

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.

Oluşturma aşamaları ve Stillerin çalıştığı yerler
Şekil 1. Oluşturma aşamaları ve stillerin kullanıldığı yerler

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

basic_box_border_change

Güncelleme performansını ölçmek için bir Box öğesinin kenarlık rengini değiştirir.

-%59,91

-%77,22

input_state_basic_box

Stile dayalı fareyle üzerine gelme/odaklanma/basma durumlarını manuel etkileşim durumu koleksiyonuyla karşılaştırır.

-%5,24

-%14,72

basic_box

Beş zincirli değiştiriciyle Box öğesinin ilk bileşimini ve düzenini ölçer.

-%4,78

-%6,60

basic_text

Sabit kodlanmış dizelerle beş BasicText bileşeni oluşturur.

+%0,62

+%2,41

basic_text_provided_color

Metin rengini bir stil aracılığıyla ayarlama ile CompositionLocalProvider kullanarak ayarlamayı karşılaştırır.

+%5,86

+%9,82