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ına bakarak APK boyutu ve derleme süresi üzerindeki etki incelenmektedir.

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 Compose 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 çıktı. Bu, 782 KB'lık bir artış anlamına geliyor. Oluşturulan APK, Görünümler ve Compose'un 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ış normaldir.

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 geliyor. Bu azalma, 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ğinden 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 Compose Yalnızca Compose
Ortalama derleme süresi 299,47 ms 399,09 ms 342,16 ms

Sunflower'a Compose ilk eklendiğinde ortalama derleme süresi 299 ms'den 399 ms'ye yükseldi. 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 taşıma işlemi tamamlandığında ortalama derleme süresi 342 ms'ye düşerek 57 ms azaldı. 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 yeni sürümlerine güncelleme gibi derleme süresini toplu olarak azaltan çeşitli faktörlere bağlanabilir.

Ö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 dezavantajlar, Compose'un avantajları ile karşılaştırılmalıdır. Özellikle de Compose'u kullanmaya başladığınızda geliştirici üretkenliğinde görülen artışlar göz önünde bulundurulmalı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 bölümünde daha fazla örnek olay incelemesi okuyabilirsiniz.

Çalışma zamanı performansı

Bu bölümde, Jetpack Compose'un Görünüm 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 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ı 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'u genişletir

Ekranda çizim yapan 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ğı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 yeniden oynatılabilir şekilde yazılan basit composable işlevlerdir. Bu sayede, açık durum takibi, bellek ayırma ve geri çağırma işlemleri, belirli bir View türünün tüm uzantıları tarafından zorunlu kılınmak yerine yalnızca söz konusu özellikleri gerektiren composable'larla sınırlandırılır.

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

Birden fazla 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 composable'ları 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'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 Macrobenchmark kitaplığını kullanabilirsiniz. Jetpack Compose ile nasıl kullanacağınızı öğrenmek için MacrobenchmarkSample projesine bakın.

Jetpack Compose ekibi, sürümler arasında gerilemeleri izlemek ve görünümlere göre performansı doğrulamak için Macrobenchmark'ı da kullanır. Açık kaynaklı Pokedex uygulamasında Compose ve Görünümler'i karşılaştıran ayrıntılı başlatma ve kaydırma karşılaştırmaları için Hero karşılaştırmaları başlıklı makaleyi inceleyin.

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