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.
Sizin için önerilenler
- Not: JavaScript devre dışı olduğunda bağlantı metni gösterilir.
- Hero karşılaştırmaları
- Dikkat edilmesi gereken diğer noktalar
- Görünümlerde Compose'u kullanma
- Kaydırma