Oluşturma ve Görüntüleme metriklerini karşılaştırma

Jetpack Compose, kullanıcı arayüzü geliştirme sürecini hızlandırır ve Android geliştirme sürecini iyileştirir. Ancak mevcut bir uygulamaya Compose'u eklemenin uygulamanın APK boyutu, derleme ve çalışma zamanı performansı gibi metrikleri nasıl etkileyebileceğini göz önünde bulundurun.

APK boyutu ve derleme süreleri

Bu bölümde, View tabanlı bir uygulamayı Compose'a taşımayla ilgili en iyi uygulamaları gösteren Sunflower örnek uygulamasına bakarak APK boyutu ve derleme süresine olan etkisi ele alınmaktadır.

APK boyutu

Projenize kitaplık eklemek APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod sıkıştırma etkin olan her projenin, R8 tam modu kullanılarak sıkıştırılmış sürüm APK'sı içindir ve APK Analizcisi kullanılarak ölçülmüştür.

Yalnızca görüntüleme sayısı Karma Görünümler ve Oluşturma Yalnızca oluşturma
İndirme boyutu 2.252 KB 3.034 KB 2.966 KB

Oluştur özelliği Sunflower'a ilk kez eklendiğinde APK boyutu 2.252 KB'dan 3.034 KB'a yükseldi. Bu, 782 KB'lık bir artış anlamına geliyor. Oluşturulan APK, Views ve Compose'un bir karışımıyla kullanıcı arayüzü derlemesinden oluşuyordu. Sunflower'a ek bağımlılıklar eklendiğinden bu artış beklenir.

Buna karşılık, Sunflower yalnızca Compose uygulamasına taşındığında APK boyutu 3.034 KB'tan 2.966 KB'ya düştü. Bu, 68 KB'lık bir azalma anlamına geliyor. Bu düşüş, AppCompat ve ConstraintLayout gibi kullanılmayan View bağımlılıkları kaldırıldığı için gerçekleşti.

Derleme süresi

Compose derleyicisi, uygulamanızdaki derlenebilirleri işlediği için Compose'u eklemek uygulamanızın derleme süresini artırır. Aşağıdaki sonuçlar, Sunflower'ın hata ayıklama derleme süresi için ortalama bir derleme süresi elde edilebilmesi amacıyla derlemeyi birkaç kez yürüten bağımsız gradle-profiler aracı kullanılarak elde edilmiştir:

gradle-profiler --benchmark --project-dir . :app:assembleDebug
Yalnızca görüntüleme sayısı Karma Görünümler ve Oluşturma Yalnızca oluşturma
Ortalama derleme süresi 299,47 ms 399,09 ms 342,16 ms

Oluştur özelliği Sunflower'a ilk eklendiğinde ortalama derleme süresi 299 ms'den 399 ms'ye yükseldi. Bu da 100 ms'lik bir artış anlamına geliyordu. Bu süre, Compose derleyicisinin projede tanımlanan Compose kodunu dönüştürmek için ek görevler gerçekleştirmesinden kaynaklanır.

Buna karşılık, Sunflower'ın Compose'a taşınması tamamlandığında ortalama derleme süresi 342 ms'ye düştü. Bu, 57 ms'lik bir düşüş anlamına geliyor. Bu azalma, veri bağlamayı kaldırma, kapt kullanan bağımlılıkları KSP'ye taşıma ve çeşitli bağımlılıkları en son sürümlerine güncelleme gibi toplu olarak derleme süresini azaltan çeşitli faktörlerle ilişkilendirilebilir.

Özet

Compose'u kullanmaya başlamak, uygulamanızın APK boyutunu etkili bir şekilde artırmanın yanı sıra Compose kodunun derleme süreci nedeniyle uygulamanızın derleme süresi performansını da artırır. Ancak bu değiş tokuşların, özellikle Compose'u kullanmaya başladıklarında geliştirici üretkenliğindeki artışlar açısından Compose'un avantajlarıyla karşılaştırılması gerekir. Örneğin, Play Store ekibi, kullanıcı arayüzü yazmanın bazen%50'ye varan oranda çok daha az kod gerektirdiğini tespit ederek kod verimliliğini ve sürdürülebilirliğini artırmıştır.

Ekipler için Oluştur'u kullanmaya başlama başlıklı makalede daha fazla örnek olay bulabilirsiniz.

Çalışma zamanı performansı

Bu bölümde, Jetpack Compose'un View sisteminin performansıyla karşılaştırması ve nasıl ölçebileceğiniz hakkında bilgi edinmenize yardımcı olmak için Jetpack Compose'daki çalışma zamanı performansıyla ilgili konular ele alınmaktadır.

Akıllı yeniden derlemeler

Kullanıcı arayüzünün bölümleri geçersiz olduğunda Oluştur, yalnızca güncellenmesi gereken bölümleri yeniden oluşturmaya çalışır. Bu konu hakkında daha fazla bilgiyi Komponlanabilirlerin yaşam döngüsü ve Jetpack Compose aşamaları belgelerinde bulabilirsiniz.

Referans Profiller

Temel Profiller, yaygın kullanıcı işlemlerini hızlandırmanın mükemmel bir yoludur. Uygulamanıza bir referans profili eklemek, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarından kaçınarak kod yürütme hızını ilk lansmana kıyasla yaklaşık% 30 artırabilir.

Jetpack Compose kitaplığı kendi referans profilini içerir ve uygulamanızda Compose'u kullandığınızda bu optimizasyonları otomatik olarak alırsınız. Ancak bu optimizasyonlar yalnızca Compose kitaplığı içindeki kod yollarını etkiler. Bu nedenle, Compose dışındaki kod yollarını kapsayacak şekilde uygulamanıza bir referans profili eklemenizi öneririz.

Görüntüleme sistemiyle karşılaştırma

Jetpack Compose, View sistemine kıyasla birçok iyileştirmeye sahiptir. Bu iyileştirmeler aşağıdaki bölümlerde açıklanmıştır.

Her şey görünümü genişletir

Ekranda çizilen her View (ör. TextView, Button veya ImageView), tüm kullanım alanlarını desteklemek için bellek ayırma, açık durum izleme ve çeşitli geri çağırma işlevleri gerektirir. Ayrıca, özel View sahibinin, gerekli olmadığında (ör. tekrarlanan veri işleme için) yeniden çizmeyi önlemek üzere açık mantık uygulaması gerekir.

Jetpack Compose bu sorunu birkaç şekilde ele alır. Oluşturma, çizim görünümleri için açıkça güncellenebilir nesnelere sahip değildir. Kullanıcı arayüzü öğeleri, bilgileri yeniden oynatılabilir şekilde kompozisyona yazılan basit, birleştirilebilir işlevlerdir. Bu, belirli bir View türündeki tüm uzantılar tarafından zorunlu kılınmak yerine, açık durum izleme, bellek atama ve geri çağırma işlemlerini yalnızca söz konusu özellikleri gerektiren birleştirilebilir öğelere indirgemeye yardımcı olur.

Ayrıca, Oluştur, değişiklik yapmanız gerekmiyorsa daha önce çizilen sonucu yeniden oynatarak akıllı yeniden oluşturma sağlar.

Birden fazla düzen geçişi

Geleneksel ViewGroup'lar, ölçüm ve düzen API'lerinde çok fazla ifadeye sahiptir. Bu da onları birden fazla düzen geçişine eğilimli hale getirir. Bu birden fazla düzen geçişi, görünüm hiyerarşisindeki belirli iç içe yerleştirilmiş noktalarda yapılırsa katlanarak artan bir çalışma yüküne neden olabilir.

Jetpack Compose, API sözleşmesi aracılığıyla tüm düzen derleyicileri için tek bir düzen geçişi uygular. Bu sayede Compose, derin kullanıcı arayüzü ağaçlarını verimli bir şekilde yönetebilir. Birden fazla ölçüm gerekiyorsa Compose'ta içsel ölçümler bulunur.

Başlangıç performansını görüntüleme

Görünüm sisteminin, belirli bir düzeni ilk kez gösterirken XML düzenlerini şişirmesi gerekir. Bu maliyet, Jetpack Compose'a kaydedilir. Bunun nedeni, düzenlerin Kotlin'de yazılmış ve uygulamanızın geri kalanı gibi derlenmiş olmasıdır.

Compose'u karşılaştırma

Jetpack Compose 1.0'da, bir uygulamanın debug ve release modlarındaki performansı arasında önemli farklılıklar vardır. Temsil edici zamanlamalar için uygulamanızın profilini oluştururken debug yerine her zaman release derlemesini kullanın.

Jetpack Compose kodunuzun nasıl performans gösterdiğini kontrol etmek için Jetpack Macrobenchmark kitaplığını kullanabilirsiniz. Jetpack Compose ile nasıl kullanılacağını öğrenmek için MacrobenchmarkSample projesine bakın.

Jetpack Compose ekibi, yaşanabilecek tüm gerilemelerin yakalanması için Macrobenchmark'i de kullanır. Örneğin, gerileme izlemek için tembel sütun karşılaştırmasına ve kontrol paneline göz atın.

Profil oluşturma işlemi

Jetpack Compose, paketlenmemiş bir kitaplık olduğundan View sisteminin kullanıcı arayüzü araç seti sınıflarını ve çizilebilir öğelerini önceden yükleyen Zygote'tan yararlanamaz. Jetpack Compose 1.0, sürüm derlemeleri için profil yükleme özelliğini kullanır. Profil yükleyiciler, uygulamaların yükleme sırasında önceden derlenmesi gereken kritik kodu belirtmesine olanak tanır. Compose, Compose uygulamalarında başlatma süresini ve takılmaları azaltan profil yükleme kurallarıyla birlikte gönderilir.