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

Jetpack Compose kullanıcı arayüzü geliştirmeyi hızlandırır ve Android geliştirmeyi iyileştirir. Bununla birlikte, mevcut bir uygulamaya Compose'u eklemenin uygulamanın APK boyutu, derleme ve çalışma zamanı performansı gibi metrikleri nasıl etkileyebileceğini de dikkate alın.

APK boyutu ve derleme süreleri

Bu bölümde, APK boyutu ve derleme süresi üzerindeki etki hakkında daha fazla bilgi edinmek için View tabanlı bir uygulamayı Compose'a taşımayla ilgili en iyi uygulamaları gösteren Sunflower örnek uygulamasını inceleyebilirsiniz.

APK boyutu

Projenize kitaplık eklemek, projenizin APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod daraltma özelliğinin etkin olduğu, R8 tam modu kullanılan ve APK Analizcisi kullanılarak ölçülen her bir projenin küçültülmüş APK'sına aittir.

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

Ayçiçeği'ne ilk kez Compose'u eklediğinizde APK boyutu 2.252 KB'tan 3.034 KB'a yükselmiştir. Bu da 782 KB'lık bir artıştır. Oluşturulan APK, Görünümler ve Oluşturma komutlarının bir karışımını içeren kullanıcı arayüzü derlemesinden oluşuyordu. Sunflower'a başka bağımlılıklar eklendiğinden bu artış beklenmektedir.

Buna karşılık, Sunflower yalnızca Compose uygulamasına taşındığında APK boyutu 3.034 KB'tan 2.966 KB'ye düştü. Bu da 68 KB'lık bir düşüşe neden oldu. Bu düşüş, AppCompat ve ConstraintLayout gibi kullanılmayan View bağımlılıklarının kaldırılmasından kaynaklandı.

Derleme zamanı

Compose'u eklemek, Compose derleyicisi uygulamanızdaki composable'ları işlerken uygulamanızın derleme süresini artırır. Aşağıdaki sonuçlar, bir derlemeyi birkaç kez yürüten bağımsız gradle-profiler aracı kullanılarak elde edildi. Böylece, Sunflower'ın hata ayıklama derleme süresi için ortalama derleme süresi elde edilebilir:

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

Ayçiçeği'ne ilk kez Compose eklendiğinde ortalama derleme süresi 299 ms'den 399 ms'ye yükseldi (100 ms'lik bir artış). 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 geçişi tamamlandığında ortalama derleme süresi 342 ms'ye, yani 57 ms'ye düştü. Bu azalma; veri bağlamayı kaldırma, kapt to KSP kullanan bağımlılıkları taşıma ve bazı bağımlıları en son sürümlerine güncelleme gibi derleme süresini toplu olarak kısaltan çeşitli faktörlerle ilişkilendirilebilir.

Özet

Oluşturma özelliğinin kullanılması, uygulamanızın APK boyutunu etkili bir şekilde artırır ve Compose kodunun derleme süreci nedeniyle uygulamanızın derleme süresi performansını artırır. Ancak, özellikle Compose'u kullanmaya başlarken geliştirici üretkenliğinin artması göz önünde bulundurulduğunda, bu dengelerin Compose'un avantajlarıyla karşılaştırılarak değerlendirilmesi gerekir. Örneğin, Play Store ekibi, kullanıcı arayüzü yazmanın çok daha az kod gerektirdiğini (bazen%50'ye kadar), böylece üretkenliği ve kodun sürdürülebilirliğini artırdığını belirledi.

Ekipler için Oluşturma özelliğini kullanmaya başlama bölümünde daha fazla örnek olay okuyabilirsiniz.

Çalışma zamanı performansı

Bu bölümde, Jetpack Compose'un View sistemi performansıyla karşılaştırmasını ve nasıl ölçebileceğinizi anlamanıza yardımcı olmak için Jetpack Compose'daki çalışma zamanı performansıyla ilgili konular ele alınmaktadır.

Akıllı yeniden oluşturmalar

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 bilgi için composables'ın yaşam döngüsü ve Jetpack Compose aşama belgelerine göz atın.

Temel Profiller

Temel Profiller, yaygın kullanıcı yolculuklarını hızlandırmanın mükemmel bir yoludur. Uygulamanıza bir Temel Profil eklemek, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarını ortadan kaldırarak ilk lansmandan itibaren kod yürütme hızını yaklaşık% 30 artırabilir.

Jetpack Compose kitaplığının kendi Temel Profili bulunur ve uygulamanızda Compose'u kullandığınızda bu optimizasyonları otomatik olarak alırsınız. Ancak bu optimizasyonlar yalnızca Compose kitaplığındaki kod yollarını etkiler. Bu nedenle, Compose dışındaki kod yollarını kapsamak için uygulamanıza bir Temel Profil eklemenizi öneririz.

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

Jetpack Compose'da View sistemine göre birçok iyileştirme yapıldı. Bu iyileştirmeler aşağıdaki bölümlerde açıklanmıştır.

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

Ekranda gösterilen TextView, Button veya ImageView gibi her View, tüm kullanım alanlarını desteklemek için bellek ayırmaları, açık durum izleme ve çeşitli geri çağırmalar gerektirir. Dahası, özel View sahibinin, tekrar eden veri işleme gibi gereksiz durumlarda yeniden çizim yapılmasını önlemek için açık bir mantık uygulaması gerekir.

Jetpack Compose bu sorunu birkaç şekilde ele alıyor. Oluşturma işlemi, çizim görünümleri için açık ve güncellenebilir nesneleri içermez. Kullanıcı arayüzü öğeleri, bilgileri besteye tekrar oynatılabilir bir şekilde yazılan basit composable işlevlerdir. Böylece, belirli bir View türündeki tüm uzantılar için bunları zorunlu tutmak yerine, yalnızca söz konusu özellikleri gerektiren composable'ların açık durum takibini, bellek ayırmalarını ve geri çağırmalarını azaltmaya yardımcı olur.

Ayrıca Compose akıllı yeniden kompozisyonlar sunar, böylece değişiklik yapmanız gerekmezseniz önceden çizilmiş sonucu tekrar oynatır.

Birden çok düzen kartı

Geleneksel ViewGroups, ölçü ve düzen API'lerinde çok sayıda ifade gücüne sahiptir ve bu da onları birden fazla düzen geçişi yapmalarına olanak tanır. Bu birden fazla düzen geçişi, görünüm hiyerarşisindeki 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 composable'ları için tek bir düzen geçişi sağlar. Böylece Compose derin kullanıcı arayüzü ağaçlarını verimli bir şekilde işleyebilir. Birden fazla ölçüm gerekiyorsa Compose'un içsel ölçümleri vardır.

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

View sisteminin, belirli bir düzeni ilk kez gösterirken XML düzenlerini genişletmesi gerekir. Düzenler Kotlin'de yazıldığı ve uygulamanızın geri kalanı gibi derlendiği için bu maliyet Jetpack Compose'da kaydedilir.

Karşılaştırma Oluşturma

Jetpack Compose 1.0'da bir uygulamanın debug ve release modlarındaki performansı arasında önemli farklar vardır. Temsili 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 Makrobenchmark kitaplığını kullanabilirsiniz. Jetpack Compose ile nasıl kullanacağınızı öğrenmek için MakrobenchmarkSample projesi'ne göz atın.

Jetpack Compose ekibi de meydana gelebilecek regresyonları yakalamak için Makrobenchmark'tan yararlanır. Örneğin, regresyonları izlemek için geç sütun karşılaştırmasına ve bu sütunun kontrol paneline bakın.

Profil yüklemesi oluştur

Jetpack Compose grup halinde olmayan bir kitaplık olduğundan View sisteminin Kullanıcı Arayüzü Araç Seti sınıflarını ve çekilebilir öğelerini önceden yükleyen Zygote'tan faydalanamaz. Jetpack Compose 1.0 sürüm derlemeleri için profil yüklemesini kullanır. Profil yükleyiciler, uygulamaların yükleme sırasında derlenecek kritik kodu belirtmesine olanak tanır. Compose uygulamalarında başlatma süresini ve olumsuzlukları azaltan gemi profili yükleme kuralları oluşturun.