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. Ancak mevcut bir uygulamaya Compose 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, görünüm tabanlı bir uygulamayı Compose'a taşımayla ilgili en iyi uygulamaları gösteren Sunflower örnek uygulaması incelenerek APK boyutu ve derleme süresi üzerindeki etki ele alınmaktadır.

APK boyutu

Projenize kitaplık eklemek APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod daraltma etkinleştirilmiş, R8 tam modu kullanan ve APK Analyzer ile ölçülen her projenin sadeleştirilmiş 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 Compose
İndirme boyutu 2.252 KB 3.034 KB 2.966 KB

Sunflower'a ilk kez Compose eklediğimizde APK boyutu 2.252 KB'tan 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şturma'nın bir karışımıyla oluşturulan kullanıcı arayüzünden oluşuyordu. Sunflower'a ek bağımlılıklar eklendiği için bu artış beklenen bir durumdur.

Buna karşılık, Sunflower yalnızca Compose kullanan bir uygulamaya taşındığında APK boyutu 3.034 KB'tan 2.966 KB'a düştü. Bu, 68 KB'lık bir azalma anlamına gelir. Bu düşüş, AppCompat ve ConstraintLayout gibi kullanılmayan görünüm bağımlılıklarının kaldırılmasından kaynaklandı.

Derleme zamanı

Compose derleyicisi uygulamanızdaki composable'ları 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 derlemesi süresi için ortalama bir derleme süresi elde edilebilecek şekilde bir 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 Compose
Ortalama derleme süresi 299,47 ms 399,09 ms 342,16 ms

Sunflower'a Compose ilk kez eklendiğinde ortalama derleme süresi 299 ms'den 399 ms'ye çıktı. Bu, 100 ms'lik bir artış anlamına geliyor. 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 geçişi tamamlandığında ortalama derleme süresi 342 ms'ye düştü (57 ms azalma). Bu azalma, derleme süresini toplu olarak azaltan çeşitli faktörlere bağlanabilir. Örneğin, veri bağlamayı kaldırma, kapt kullanan bağımlılıkları KSP'ye taşıma ve çeşitli bağımlılıkları en yeni sürümlerine güncelleme.

Özet

Compose'u kullanmaya başladığınızda uygulamanızın APK boyutu artar. Ayrıca Compose kodunun derleme süreci nedeniyle uygulamanızın derleme süresi performansı da artar. Ancak bu ödünler, özellikle Compose'u kullanmaya başlarken geliştirici üretkenliğindeki artışlar olmak üzere Compose'un avantajları ile karşılaştırılmalıdır. Örneğin, Play Store ekibi, kullanıcı arayüzü yazmanın çok daha az kod gerektirdiğini (bazen%50'ye kadar), böylece kodun üretkenliğini ve sürdürülebilirliğini artırdığını tespit etti.

Ekipler için Compose'u kullanma sayfasında daha fazla örnek olay incelemesi okuyabilirsiniz.

Çalışma zamanı performansı

Bu bölümde, Jetpack Compose'un View sisteminin performansıyla nasıl karşılaştırıldığını ve bunu 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şturma

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 Birleştirilebilir öğelerin yaşam döngüsü ve Jetpack Compose aşamaları belgelerinde bulabilirsiniz.

Temel Profiller

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

Jetpack Compose kitaplığı kendi Temel Profilini içerir ve uygulamanızda Compose'u kullandığınızda bu optimizasyonlardan otomatik olarak yararlanırsınız. Ancak bu optimizasyonlar yalnızca Compose kitaplığındaki kod yollarını etkiler. Bu nedenle, Compose dışındaki kod yollarını kapsayacak şekilde uygulamanıza Temel Profil eklemenizi öneririz.

Görünüm sistemiyle karşılaştırma

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

Her şey View'dan türetilir.

TextView, Button veya ImageView gibi ekranda çizim yapan her View, tüm kullanım alanlarını desteklemek için bellek ayırma, açık durum izleme ve çeşitli geri çağırmalar gerektirir. Ayrıca özel View sahibinin, gerekli olmadığında (ör. tekrarlanan veri işleme için) yeniden çizimi önlemek amacıyla açık bir mantık uygulaması gerekir.

Jetpack Compose, bu sorunu birkaç şekilde çözer. Compose'da görünümleri çizmek için açıkça güncellenebilir nesneler yoktur. Kullanıcı arayüzü öğeleri, bilgileri oluşturmaya tekrarlanabilir şekilde yazılan basit composable işlevlerdir. Bu sayede, açık durum takibi, bellek ayırma ve geri çağırma işlemleri yalnızca söz konusu özellikleri gerektiren composable'larla sınırlandırılır. Belirli bir View türünün tüm uzantıları için bu özelliklerin kullanılması gerekmez.

Ayrıca Compose, değişiklik yapmanız gerekmiyorsa daha önce çizilen sonucu tekrar oynatan akıllı yeniden oluşturma özelliği sunar.

Birden çok düzen geçişi

Geleneksel ViewGroup'lar, ölçüm ve düzen API'lerinde çok fazla ifade gücüne sahiptir. Bu nedenle, birden fazla düzen geçişine yatkındır. Bu çoklu düzen geçişleri, görünüm hiyerarşisindeki belirli iç içe yerleştirilmiş noktalarda yapıldığında katlanarak artan bir iş yüküne neden olabilir.

Jetpack Compose, API sözleşmesi aracılığıyla tüm düzen bileşenleri 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 içsel ölçümler bulunur.

Başlatma performansını görüntüleme

Görünüm sistemi, belirli bir düzeni ilk kez gösterirken XML düzenlerini genişletmelidir. Düzenler Kotlin'de yazılıp uygulamanızın geri kalanı gibi derlendiğinden Jetpack Compose'da bu maliyetten tasarruf edilir.

Compose'u karşılaştırma

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 çıkarırken her zaman debug yerine release derlemesini kullanın.

Jetpack Compose kodunuzun performansını kontrol etmek için Jetpack Macrobenchmark kitaplığını kullanabilirsiniz. Jetpack Compose ile nasıl kullanacağınızı öğrenmek için MacrobenchmarkSample projesine bakın.

Jetpack Compose ekibi, olası gerilemeleri yakalamak için de Macrobenchmark'ı kullanır. Örneğin, gerilemeleri izlemek için LazyColumn karşılaştırmasına ve kontrol paneline bakın.

Oluşturma profili yükleme

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 yararlanmaz. Jetpack Compose 1.0, yayınlanan derlemeler için profil yüklemeyi kullanır. Profil yükleyiciler, uygulamaların yükleme sırasında önceden (AOT) derlenecek kritik kodları belirtmesine olanak tanır. Compose, Compose uygulamalarında başlangıç süresini ve takılmaları azaltan profil yükleme kuralları sunar.