Jetpack Compose, kullanıcı arayüzü geliştirme sürecini hızlandırır ve Android geliştirme sürecini iyileştirir. Ancak mevcut bir uygulamaya Compose'u 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şımayla ilgili en iyi uygulamaları gösteren Sunflower örnek uygulamasına bakarak APK boyutu ve derleme süresi üzerindeki etki açıklanmaktadır.
APK boyutu
Projenize kitaplık eklemek APK boyutunu artırır. Aşağıdaki sonuçlar, kaynak ve kod sıkıştırma etkin olan her projenin, R8 tam modu kullanılarak sıkıştırılmış sürüm APK'sı içindir ve APK Analizcisi kullanılarak ölçülmüştür.
Yalnızca görüntüleme sayısı | Karma Görünümler ve Oluşturma | Yalnızca oluşturma | |
---|---|---|---|
İndirme boyutu | 2.252 KB | 3.034 KB | 2.966 KB |
Oluştur özelliği Sunflower'a ilk kez eklendiğinde APK boyutu 2.252 KB'dan 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ştur'un karışımıyla kullanıcı arayüzü derlemesinden oluşuyordu. Ayçiçeği'ne yeni bağımlılıklar eklendikçe bu artışın yaşanması beklenen bir durumdur.
Buna karşılık, Sunflower yalnızca Compose uygulamasına taşındığında APK boyutu 3.034 KB'tan 2.966 KB'ya düştü. Bu, 68 KB'lık bir azalma anlamına geliyor. Bu düşüş, AppCompat
ve ConstraintLayout
gibi kullanılmayan View bağımlılıkları kaldırıldığı için gerçekleşti.
Derleme süresi
Compose derleyicisi, uygulamanızdaki derlenebilirleri 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 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üleme sayısı | 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. |
Oluştur özelliği Sunflower'a ilk eklendiğinde ortalama derleme süresi 299 ms'den 399 ms'ye yükseldi. Bu da 100 ms'lik bir artış anlamına geliyordu. 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 taşınması tamamlandığında ortalama derleme süresi 342 ms'ye düştü. Bu, 57 ms'lik bir düşüş anlamına geliyor. 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 son sürümlerine güncelleme gibi toplu olarak derleme süresini azaltan çeşitli faktörlerle ilişkilendirilebilir.
Özet
Compose'u kullanmak uygulamanızın APK boyutunu etkili bir şekilde büyütür. Ayrıca, Compose kodu derleme işlemi nedeniyle uygulamanızın derleme süresi performansını da artırır. Ancak bu değiş tokuşların, özellikle Compose'u kullanmaya başladıklarında geliştirici üretkenliğindeki artışlar açısından Compose'un avantajlarıyla karşılaştırılması gerekir. Örneğin, Play Store ekibi, kullanıcı arayüzü yazmanın bazen%50'ye varan oranda çok daha az kod gerektirdiğini tespit etti. Bu da kodun üretkenliğini ve sürdürülebilirliğini artırdı.
Ekipler için Oluştur'u kullanmaya başlama başlıklı makalede daha fazla örnek olay bulabilirsiniz.
Çalışma zamanı performansı
Bu bölümde, Jetpack Compose'un View sisteminin performansıyla karşılaştırmasını ve bunu nasıl ölçebileceğinizi anlamanıza yardımcı olmak için Jetpack Compose'da çalışma zamanı performansıyla ilgili konular ele alınmaktadır.
Akıllı yeniden derlemeler
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 Komponlanabilirlerin yaşam döngüsü ve Jetpack Compose aşamaları belgelerinde bulabilirsiniz.
Temel Profiller
Temel Profiller, yaygın kullanıcı işlemlerini hızlandırmanın mükemmel bir yoludur. Uygulamanıza bir referans profili eklemek, dahil edilen kod yolları için yorumlama ve tam zamanında (JIT) derleme adımlarından kaçınarak kod yürütme hızını ilk lansmana kıyasla yaklaşık% 30 artırabilir.
Jetpack Compose kitaplığı kendi referans 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ığı içindeki kod yollarını etkiler. Bu nedenle, Compose dışındaki kod yollarını kapsayacak şekilde uygulamanıza bir referans profili eklemenizi öneririz.
Görüntüleme sistemiyle karşılaştırma
Jetpack Compose, View sistemine kıyasla birçok iyileştirmeye sahiptir. Bu iyileştirmeler aşağıdaki bölümlerde açıklanmıştır.
Görünüme her şey dahildir
Ekranda çizilen 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ğırma işlevleri gerektirir. Ayrıca, özel View
sahibinin, gerekli olmadığında (ör. tekrarlanan veri işleme için) yeniden çizmeyi önlemek üzere 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 ve 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üründeki tüm uzantılar tarafından zorunlu kılınmak yerine, açık durum izleme, bellek atama ve geri çağırma işlemlerini yalnızca söz konusu özellikleri gerektiren birleştirilebilir öğelere indirgemeye yardımcı olur.
Ayrıca, Compose akıllı yeniden oluşturma özelliği sunar. Bu özellik, değişiklik yapmanız gerekmiyorsa daha önce çizilen sonucu yeniden oynatır.
Birden fazla düzen geçişi
Geleneksel ViewGroup'lar, ölçüm ve düzen API'lerinde çok fazla ifadeye sahiptir. Bu da onları birden fazla düzen geçişine eğilimli hale getirir. Bu birden fazla düzen geçişi, görünüm hiyerarşisindeki belirli iç içe yerleştirilmiş noktalarda yapılırsa katlanarak artan bir çalışma yüküne neden olabilir.
Jetpack Compose, API sözleşmesi aracılığıyla tüm düzen derleyicileri 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'ta içsel ölçümler bulunur.
Başlangıç performansını göster
Görünüm sisteminin, belirli bir düzeni ilk kez gösterirken XML düzenlerini şişirmesi gerekir. Düzenler Kotlin'de yazıldığı ve uygulamanızın geri kalanı gibi derlendiği için bu maliyet Jetpack Compose'a kaydedilir.
Compose'u karşılaştırma
Jetpack Compose 1.0'da, bir uygulamanın debug
ve release
modlarındaki performansı arasında önemli farklılıklar vardır. Temsil edici 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. Bu aracı Jetpack Compose ile nasıl kullanacağınızı öğrenmek için MacrobenchmarkSample projesine bakın.
Jetpack Compose ekibi, olabilecek regresyonları yakalamak için Macrobenchmark'ı da kullanıyor. Örneğin, gerileme izlemek için tembel sütun karşılaştırmasına ve kontrol paneline göz atın.
Profil yükleme
Jetpack Compose, View sisteminin Kullanıcı Arayüzü Araç Seti sınıflarını ve çekilebilir kaynaklarını önceden yükleyen Zygote'tan yararlanamaz. Jetpack Compose 1.0, sürüm derlemeleri için profil yükleme özelliğini kullanır. Profil yükleyiciler, uygulamaların yükleme sırasında önceden derlenmesi gereken kritik kodu belirtmesine olanak tanır. Compose uygulamalarında başlatma süresini ve olumsuzlukları azaltan gönderim profili yükleme kuralları oluşturun.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Dikkat edilmesi gereken diğer noktalar
- Görünümler'de Oluşturma özelliğini kullanma
- Kaydırma