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, lambda tabanlı değiştiriciler oluşturmaya gerek kalmaz. Çünkü stiller her zaman kompozisyon aşamasını atlar.

Oluşturma aşamaları ve Stillerin çalıştığı yerler
Şekil 1. Compose'un aşamaları ve stillerin çalıştığı 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ç 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

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 kompozisyonunu 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 stil aracılığıyla ayarlama ile CompositionLocalProvider kullanarak ayarlama arasındaki farkı karşılaştırır.

+%5,86

+%9,82