Jetpack Compose, kullanıcı arayüzü geliştirmeyi hızlandırır ve Android geliştirmeyi iyileştirir. Ancak 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şıma konusunda en iyi uygulamaları gösteren bir uygulama olan Sunflower örnek uygulaması incelenerek APK boyutu ve derleme süresi üzerindeki etkiler ele alınmaktadır.
APK boyutu
Projenize kitaplık eklemek APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod küçültme etkinleştirilmiş, R8 tam modu kullanılarak oluşturulmuş ve APK Analizcisi ile ölçülmüş her projenin küçültülmüş sürüm APK'sına aittir.
Yalnızca görüntülemeler | Karma Görünümler ve Oluşturma | Yalnızca oluşturma | |
---|---|---|---|
İndirme boyutu | 2.252 KB | 3.034 KB | 2.966 KB |
Compose, Sunflower'a ilk kez eklendiğinde 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 Compose'un bir karışımıyla oluşturulan kullanıcı arayüzünden oluşuyordu. Sunflower'a ek bağımlılıklar eklendiğinden bu artışın olması beklenir.
Buna karşılık, Sunflower yalnızca Compose'un kullanıldığı bir uygulamaya taşındığında APK boyutu 3.034 KB'tan 2.966 KB'a düşerek 68 KB küçüldü. Bu azalma, AppCompat
ve ConstraintLayout
gibi kullanılmayan View bağımlılıklarının kaldırılmasından kaynaklanmıştır.
Derleme zamanı
Compose eklemek, Compose derleyicisi uygulamanızdaki composable'ları işlediği için 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 derleme süresinin 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ülemeler | 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 |
Compose, Sunflower'a ilk kez 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 geçişi tamamlandığında ortalama derleme süresi 342 ms'ye düşerek 57 ms azaldı. Bu azalma, veri bağlamayı kaldırma, kapt'ı KSP'ye kullanan bağımlılıkları taşıma ve çeşitli bağımlılıkları en son sürümlerine güncelleme gibi derleme süresini toplu olarak azaltan çeşitli faktörlere atfedilebilir.
Özet
Compose'u kullanmaya başlamak, uygulamanızın APK boyutunu etkili bir şekilde artırır ve Compose kodunun derleme işlemi nedeniyle uygulamanızın derleme süresi performansını da artırır. Ancak bu ödünler, özellikle Compose'u kullanmaya başlarken geliştirici üretkenliğindeki artışlar olmak üzere Compose'un avantajlarına karşı değerlendirilmelidir. Örneğin, Play Store ekibi, Compose ile kullanıcı arayüzü yazmak için bazen%50'ye kadar daha az kod gerektiğini tespit etti. Bu sayede, kodun verimliliği ve sürdürülebilirliği artırıldı.
Adopt Compose for Teams (Teams için Compose'u benimseme) başlıklı makalede daha fazla örnek olay incelemesi okuyabilirsiniz.
Çalışma zamanı performansı
Bu bölümde, Jetpack Compose'un View sisteminin performansına kıyasla nasıl bir performans gösterdiğini ve bu performansı 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 kompozisyonlar
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 Composable'ların yaşam döngüsü ve Jetpack Compose aşamaları belgelerinde bulabilirsiniz.
Temel Profiller
Temel profiller, yaygın kullanıcı yolculuklarını hızlandırmak için mükemmel bir yöntemdir. Uygulamanıza bir Baseline Profile eklemek, 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ı kapsamak için uygulamanıza temel profil eklemenizi öneririz.
View 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 sınıfını genişletir.
Ekranda çizilen her View
(ör. TextView
, Button
veya ImageView
) tüm kullanım alanlarını desteklemek için bellek ayırmaları, açık durum izleme ve çeşitli geri çağırmalar gerektirir. Ayrıca, özel View
sahibinin
gerekli olmadığında (ör. tekrarlayan veri işleme) yeniden çizimi önlemek için 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ça 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ürdeki tüm uzantıların bu özellikleri gerektirmesi yerine, yalnızca söz konusu özellikleri gerektiren composable'lar için açık durum izleme, bellek ayırma ve geri çağırma işlemlerini azaltmaya yardımcı olur.
Ayrıca, Compose, değişiklik yapmanız gerekmediğinde 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çü ve düzen API'lerinde çok fazla ifade gücüne sahiptir. Bu da birden fazla düzen geçişine neden olur. Bu çoklu düzen geçişleri, görünüm hiyerarşisinde belirli iç içe yerleştirilmiş noktalarda yapıldığında katlanarak artan iş yüküne neden olabilir.
Jetpack Compose, API sözleşmesi aracılığıyla tüm düzenlenebilir düzenler için tek bir düzen geçişi uygular. Bu sayede Compose, derin kullanıcı arayüzü ağlarını verimli bir şekilde işleyebilir. Birden fazla ölçüm gerekiyorsa Compose'da dahili ö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 ile yazılıp uygulamanızın geri kalanı gibi derlendiğinden bu maliyet Jetpack Compose'da kaydedilir.
Benchmark Compose
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 nasıl performans gösterdiğini kontrol etmek için Jetpack Macrobenchmark kitaplığını kullanabilirsiniz. Jetpack Compose ile nasıl kullanılacağını öğrenmek için MacrobenchmarkSample projesine bakın.
Jetpack Compose ekibi, olabilecek gerilemeleri yakalamak için de Macrobenchmark'ı kullanır. Örneğin, gerilemeleri izlemek için tembel sütunla ilgili karşılaştırma ölçütünü ve kontrol panelini inceleyin.
Compose profilini yükleme
Jetpack Compose, paketlenmemiş bir kitaplık olduğundan View sisteminin UI Toolkit sınıflarını ve çizilebilir öğelerini önceden yükleyen Zygote'tan yararlanmaz. 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 önceden (AOT) derlenecek kritik kodu belirtmesine olanak tanır. Compose uygulamalarında başlangıç süresini ve takılmayı azaltan Compose ships profili yükleme kuralları.
başlıklı videoda bulabilirsiniz.Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir.
- Diğer dikkat edilmesi gereken noktalar
- Görünümlerde Yazma özelliğini kullanma
- Kaydırma