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 karışımıyla oluşturulan kullanıcı arayüzünden oluşuyordu. Sunflower'a ek bağımlılıklar eklendiğinden bu artış beklenmelidir.
Buna karşılık, Sunflower yalnızca Compose'a özel 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'u eklemek, Compose derleyicisi uygulamanızdaki composable'ları işlediğinden 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ü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ğlamanın kaldırılması, kapt'ı KSP'ye kullanan bağımlılıkların taşınması ve çeşitli bağımlılıkların en son sürümlerine güncellenmesi 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şladığınızda 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 arttı.
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 düzenlemeler
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 temel profil 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 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 temel profil eklemenizi öneririz.
View sistemiyle karşılaştırma
Jetpack Compose, View sistemine göre birçok iyileştirme sunar. Bu iyileştirmeler aşağıdaki bölümlerde açıklanmıştır.
Her şey View'ı 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 composable işlevlerdir. Bu, açık durum izlemeyi, bellek ayırmayı ve geri çağırmaları yalnızca belirli bir View türdeki tüm uzantılar tarafından gerekli kılmak yerine, söz konusu özellikleri gerektiren composable'larla sınırlandırmaya yardımcı olur.
Ayrıca, Compose, değişiklik yapmanız gerekmediğinde daha önce çizilen sonucu yeniden 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 üstel 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ğ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, regresyonları izlemek için geç yüklenen sütunla ilgili karşılaştırma ölçütünü ve kontrol panelini inceleyin.
Profil yükleme oluşturma
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 duraklamayı azaltan Compose Ships profili yükleme kuralları.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir.
- Dikkat edilmesi gereken diğer noktalar
- Görünümlerde Yazma'yı kullanma
- Kaydırma