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. Bununla birlikte, Compose'u mevcut bir uygulamaya 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üresi üzerindeki etki açıklanmaktadır.

APK boyutu

Projenize kitaplıklar eklemek projenizin APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod küçültmenin etkin olduğu, R8 tam modunun kullanıldığı ve APK Analizcisi ile ölçülen her projenin küçültülmüş sürüm APK'sı içindir.

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, projede tanımlanan Compose kodunu dönüştürmek için ek görevler gerçekleştiren Compose derleyicisinden 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, derleme süresini toplu olarak azaltan çeşitli faktörlerle ilişkilendirilebilir. Örneğin, veri bağlamayı kaldırma, kapt'ı KSP kullanan bağımlılıkları taşıma ve bazı bağımlıları en son sürümlerine güncelleme.

Özet

Compose'u kullanmak uygulamanızın APK boyutunu etkili bir şekilde büyütür. Ayrıca, Compose kodu derleme işlemi 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 etti. Bu da kodun üretkenliğini ve sürdürülebilirliğini artırdı.

Daha fazla örnek olaya Ekipler için Compose'u kullanmaya başlama başlıklı makaleden ulaşabilirsiniz.

Ç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 tekrar oynatılabilir bir şekilde besteye yazılan basit composable 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, Compose akıllı yeniden oluşturma özelliği sunar. Bu özellik, değişiklik yapmanız gerekmiyorsa daha önce çizilen sonucu yeniden oynatır.

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şisinde iç içe yerleştirilmiş belirli noktalarda yapılırsa üstel çalışmaya 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 işleyebilir. Birden fazla ölçüm gerekiyorsa Compose'da doğal ölçümler kullanılır.

Başlangıç performansını göster

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 performansını kontrol etmek için Jetpack Macrobenchmark kitaplığını kullanabilirsiniz. Bu aracı Jetpack Compose ile nasıl kullanacağınızı öğ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, regresyonları izlemek için geç sütun karşılaştırmasına ve kontrol paneline bakın.

Profil kurulumu oluşturma

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 kurulumundan yararlanı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.