Jetpack Compose performansı

Jetpack Compose mükemmel performans sunmayı amaçlar. Bu sayfada, daha iyi performans için uygulamanızı nasıl yazacağınız ve yapılandıracağınız ile kaçınılması gereken bazı kalıplar gösterilmektedir.

Öncelikle Compose'da Düşünme'deki temel Oluşturma kavramları hakkında bilgi edinmek isteyebilirsiniz.

Uygulamanızı doğru şekilde yapılandırma

Uygulamanız düşük performans gösteriyorsa bir yapılandırma sorunu olabilir. İlk adım, aşağıdaki yapılandırma seçeneklerini kontrol etmektir.

Yayınlama modunda geliştirme ve R8'i kullanma

Performans sorunları yaşıyorsanız uygulamanızı sürüm modunda çalıştırmayı deneyin. Hata ayıklama modu, birçok sorunu tespit etmek için faydalıdır ancak önemli bir performans maliyetine neden olur ve performansı düşürebilecek diğer kod sorunlarının tespit edilmesini zorlaştırabilir. Yüksek performanslı ve verimli bir sürüm derlemesi elde etmek için R8 derleyicisiyle optimizasyonu ve daraltmayı da etkinleştirmenizi öneririz.

Temel profil kullanın

Temel Profiller, dahil edilen kod yollarında yorumlama ve tam zamanında (JIT) derleme adımlarını atlayarak ilk lansmandan itibaren kod yürütme hızını yaklaşık% 30 artırır. Android Runtime (ART), bir uygulama veya kitaplıkta Temel Profil göndererek, dahil edilen kod yollarını zaman öncesinden (AOT) derlemesi aracılığıyla optimize edebilir. Böylece, her yeni uygulama yüklemesinde ve her uygulama güncellemesinde performans iyileştirmeleri sağlar. Bu profil destekli optimizasyon (PGO), uygulamaların ilk başlatma işleminden itibaren son kullanıcılar için başlatma işlemini optimize etmesine, etkileşim olumsuzluğunu azaltmasına ve genel çalışma zamanı performansını iyileştirmesine olanak tanır.

Compose, Android platformunun bir parçası değil, kitaplık olarak dağıtılır. Bu yaklaşım, Compose ekibinin Compose'u sık sık güncellemesini ve daha eski Android sürümlerini desteklemesini sağlar. Ancak, Compose'u kitaplık olarak dağıtmak ücretlendirir. Android platform kodu zaten derlenmiş ve cihaza yüklenmiştir. Ancak uygulama başlatıldığında kitaplıkların yüklenmesi ve işlev gerektiğinde JIT'in yorumlanması gerekir. Bu, başlangıçta ve bir kitaplık özelliğini ilk kez kullanırken uygulamayı yavaşlatabilir.

Referans Profiller tanımlayarak performansı artırabilirsiniz. Bu profiller, kritik kullanıcı yolculuklarında gereken sınıfları ve yöntemleri tanımlar ve uygulamanızın APK veya AAB'si ile dağıtılır. ART, uygulama yükleme işlemi sırasında bu kritik AOT kodunu derler. Böylece uygulama başlatıldığında kullanıma hazır hale gelir.

İyi bir Temel Profil tanımlamak her zaman kolay değildir. Bu nedenle Compose varsayılan olarak bir profille gönderilir. Bu avantajı görmek için herhangi bir işlem yapmanız gerekmeyebilir. Ancak, Oluştur kitaplığıyla birlikte gönderilen Temel Profil, yalnızca Oluştur kitaplığındaki kod için optimizasyonlar içerir. En iyi optimizasyonu elde etmek için uygulamanız için kritik kullanıcı yolculuklarını ele almak üzere Makrobenchmark kullanan bir Temel Profil oluşturmanız da en iyisidir. Kendi profilinizi tanımladığınızda, yardımcı olup olmadığını doğrulamak için profili test etmeniz gerekir. Bunu yapmanın iyi bir yolu, uygulamanız için Makrobenchmark testleri yazmak ve Referans Profilinizi yazıp düzeltirken test sonuçlarını kontrol etmektir. Compose kullanıcı arayüzünüz için Makrobenchmark testlerinin nasıl yazılacağına dair bir örnek için Makrobenchmark Oluşturma örneğine bakın.

Sürüm modu, R8 ve Temel Profillerin etkilerinin ayrıntılı bir dökümü için Sürümde oluşturma performansını neden her zaman test etmelisiniz? başlıklı blog yayınına göz atın.

Üç Oluşturma aşaması performansı nasıl etkiler?

Jetpack Oluşturma Aşamaları'nda açıklandığı gibi, Oluşturma bir kareyi güncellediğinde üç aşamadan geçer:

  • Beste: Oluştur, nelerin gösterileceğini belirler. composable işlevlerini çalıştırır ve kullanıcı arayüzü ağacını oluşturur.
  • Düzen: Oluştur, kullanıcı arayüzü ağacındaki her bir öğenin boyutunu ve yerleşimini belirler.
  • Çizim: Oluştur işlevi aslında bağımsız kullanıcı arayüzü öğelerini oluşturur.

Oluşturma işlemi, gerekli olmadığı sürece bu aşamaların herhangi birini akıllı bir şekilde atlayabilir. Örneğin, tek bir grafik öğesinin aynı boyuttaki iki simge arasında geçiş yaptığını varsayalım. Bu öğenin boyutu değişmediğinden ve kullanıcı arayüzü ağacında hiçbir öğe eklenmediğinden veya kaldırılmadığından Compose oluşturma ve düzen aşamalarını atlayıp bu tek öğeyi yeniden çizebilir.

Bununla birlikte, bazı kodlama hataları, Compose'un hangi aşamaları güvenli bir şekilde atlayabileceğini bilmesini zorlaştırabilir. Herhangi bir şüphe olduğunda Compose üç aşamayı da çalıştırır. Bu da kullanıcı arayüzünüzü yavaşlatabilir. Bu nedenle, en iyi performans uygulamalarının çoğu, Compose'un yapması gerekmeyen aşamaları atlamasına yardımcı olur.

Genel olarak performansı artırabilecek birkaç genel ilke vardır:

  • Mümkün olduğunda, hesaplamaları composable işlevlerinizin dışına taşıyın. Oluşturulabilir işlevlerin, kullanıcı arayüzü her değiştiğinde yeniden çalıştırılması gerekebilir. composable'a yerleştirdiğiniz tüm kodlar, potansiyel olarak bir animasyonun her karesi için yeniden yürütülür. composable'ın kodunu yalnızca kullanıcı arayüzünü geliştirmek için gereken kodla sınırlandırın.

  • Durum okumalarını mümkün olduğu kadar erteleyin. Durum okumasını "child composable" (çocuk kompozisyonu) veya daha sonraki bir aşamaya taşıyarak yeniden kompozisyonu en aza indirebilir ya da kompozisyon aşamasını tamamen atlayabilirsiniz. Bunu, sık sık değişen durum için durum değeri yerine lambda işlevlerini ileterek ve sık sık değişen durumlarda lambda tabanlı değiştiricileri tercih ederek yapabilirsiniz. Bu tekniğin bir örneğini Mümkün olduğunca uzun süre okumayı ertele bölümünde görebilirsiniz.