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üresi üzerindeki etki açıklanmaktadı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, Görünümler ve Oluştur'un karışımıyla kullanıcı arayüzü derlemesinden oluşuyordu. Ayçiçeği'ne yeni bağımlılıklar eklendikçe bu artışın yaşanması beklenen bir durumdur.

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, 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 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ı.

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ını ve bunu nasıl ölçebileceğinizi anlamanıza yardımcı olmak için Jetpack Compose'da çalışma zamanı performansıyla ilgili konular ele alınmaktadır.

Akıllı yeniden derlemeler

Kullanıcı arayüzünün bazı bölümleri geçersiz olduğunda Compose 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.

Temel 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.

Görünüme her şey dahildir

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. Compose'da, çizim görünümleri için açık ve güncellenebilir nesneler yoktur. 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, 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ş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 işleyebilir. Birden fazla ölçüm gerekiyorsa Compose'ta içsel ölçümler bulunur.

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. Düzenler Kotlin'de yazıldığı ve uygulamanızın geri kalanı gibi derlendiği için bu maliyet Jetpack Compose'a kaydedilir.

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. Bu aracı Jetpack Compose ile nasıl kullanacağınızı öğrenmek için MacrobenchmarkSample projesine bakın.

Jetpack Compose ekibi, olabilecek regresyonları yakalamak için Macrobenchmark'ı da kullanıyor. Örneğin, gerileme izlemek için tembel sütun karşılaştırmasına ve kontrol paneline göz atın.

Profil yükleme

Jetpack Compose, View sisteminin Kullanıcı Arayüzü Araç Seti sınıflarını ve çekilebilir kaynaklarını ö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 uygulamalarında başlatma süresini ve olumsuzlukları azaltan gönderim profili yükleme kuralları oluşturun.