Android Jetpack Compose Performance 2026 yılında production kalitesi için kritik beceri haline geldi. Google I/O 2025 keynote, gereksiz recomposition’ın frame drop’ların %40’ından sorumlu olduğunu açıkladı. Android Developer Blog Mart 2025: Baseline Profile kullanan uygulamalarda startup time %30 daha hızlı.

Jetpack Compose: 2026 Olgunluk Durumu

Jetpack Compose, Google’ın 2021’de stable yayınladığı modern declarative UI toolkit. 2026 itibarıyla Google Play Store top 1.000 uygulamanın %62’si Compose kullanıyor; Twitter, Airbnb, Reddit, Pinterest production’da. Compose Compiler ve Runtime 1.7+ versiyonlarında recomposition skipping algoritması iyileşti; ancak yanlış kullanımda hâlâ performans cezası yüksek.

Google I/O 2025: Compose 1.8 ile strong skipping mode varsayılan açıldı; instable parameter olan composable’lar bile artık daha az recomposition’a maruz kalıyor. Macrobenchmark 1.3 ve Baseline Profile generator iyileşmesi production performance tooling’i olgunlaştırdı.

Recomposition: Performansın Temeli

Recomposition, composable fonksiyonun state değişikliğinde yeniden çağrılmasıdır. Compose runtime hangi composable’ın yeniden hesaplanacağına state read tracking ile karar verir. İyi tasarımda yalnızca etkilenen subtree recompose olur; kötü tasarımda parent recompose tüm subtree’yi tetikler. Compose Compiler Metrics raporu hangi composable’ın “restartable”, “skippable” veya “unstable” olduğunu gösterir.

Composable Durumu Anlamı Performans Etkisi
Restartable + Skippable Aynı parameter ile çağrı atlanır Optimal
Restartable + Not Skippable Her recomposition’da çalışır Yüksek maliyet
Not Restartable Parent recompose’ta zorunlu Maliyetli
Inline composable Inlined into caller Düşük overhead
Strong skip enabled Unstable param’lı bile skip Compose 1.7+ default
Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 1
Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 1

Stability: @Stable, @Immutable, Persistent Collection

Composable’ın skippable olabilmesi için tüm parameter’larının stable olması gerekir. Stable: equals() consistent ve mutable property değişimi notify edilir. @Stable interface ve @Immutable class anotasyonu derleyiciye hint verir. Kotlin’in standard collection’ları (List, Map) varsayılan unstable; kotlinx.collections.immutable.PersistentList kullanımı önerilir.

  • @Immutable: Tüm property final ve değişmiyor (örn: data class with val)
  • @Stable: Mutable ama equals() doğru çalışıyor + State
  • PersistentList/Set/Map: kotlinx.collections.immutable, stable
  • Custom Holder: Mutable state’i StateFlow veya MutableState ile sar
  • Compose Strong Skip: Compose 1.7+ unstable bile skip eder

İlgili konu: Kotlin StateFlow rehberimizde Compose ile reactive state yönetiminin best practice’ini detaylandırdık.

LazyColumn: Listeleme Performansı

LazyColumn ve LazyRow viewport-based recycling sunar. Performansın anahtarı 3 parametre: key (unique stable identifier), contentType (item heterojense önemli), itemsIndexed yerine itemsIndexed(items, key = { it.id }). Key olmayan LazyColumn’da scroll sırasında %40 performans kaybı; contentType olmayan heterojen list’te compose pool reset.

Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 2
Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 2

Macrobenchmark ve Baseline Profile

Macrobenchmark, AndroidX library’si, gerçek cihazda startup, scroll, navigation gibi production-like senaryoları ölçer. Baseline Profile, sık kullanılan kod yollarının AOT compile edilmesini sağlar; ilk açılış (cold start) %30, scroll smoothness %22 iyileşme tipik. Compose Compiler 1.8’den itibaren Compose composable’ları otomatik profil’e dahil ediliyor.

Metrik Macrobenchmark Baseline Profile Etkisi
Cold Start TTID p95 850 ms → 590 ms %30 hızlanma
Cold Start TTFD p95 1.420 ms → 1.000 ms %30 hızlanma
Frame Render Time p99 28 ms → 16 ms %43 düşüş
Jank Frame % %4,2 → %1,8 %57 azalma
Scroll Smoothness 58 fps → 60 fps Stabilize

Compose Compiler Metrics: Raporu Okumak

Compose Compiler Metrics, derleme sırasında composable analizi üretir. JSON ve human-readable rapor; her composable için restartable, skippable, parameter’ların stability durumunu gösterir. “Unstable” işaretli parameter’lar performance issue’nun ipucu. Build script’e -P komutu ile etkinleştirilir; CI’de regression check yapılabilir.

Sektörel Use Case: Fintech, E-ticaret, Sosyal Medya

Fintechte chart-heavy ekranlar (portfolio, candle chart) Compose’da Canvas + remember + derivedStateOf kombinasyonu ile optimize. E-ticarette product list LazyVerticalGrid + key + contentType pattern’i ile 10.000+ item smooth. Sosyal medyada feed scroll için subcomposeLayout ve image preloading (Coil + ImageLoader) zorunlu.

Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 3
Android Jetpack Compose Performance 2026: Recomposition ve Stability — Görsel 3

Kurumsal Compose Performance Dönüşümünde Karşılaşılan Tipik Sorunlar

Danışmanlık projelerinde gözlemlenen tipik darboğazlar:

  • Compose Compiler Metrics raporunun CI’de tracking edilmemesi — regression’lar gözden kaçıyor
  • Macrobenchmark’ın yazılmaması — performance manuel cihaz testine bırakılıyor
  • Baseline Profile generate edilmemesi — cold start %30 daha yavaş
  • LazyColumn’da key parametresinin eksik olması — scroll performansında %40 kayıp
  • Standard Kotlin List kullanımının PersistentList’e dönüştürülmemesi
  • StateFlow yerine LiveData kullanımı — Compose’da extra recomposition

Sonuç

Compose performance 2026’da artık “framework olgunlaşana kadar bekleyelim” aşamasında değil. Compose Compiler Metrics + Macrobenchmark + Baseline Profile zorunlu üçlü. Compose 1.8 strong skipping varsayılan; ancak immutable data class + PersistentList + StateFlow kombinasyonu hâlâ tercih edilen pattern. LazyColumn’da key + contentType eksikliği yaygın tek başına %40 performans cezası kaynağı. Pilot için 1 kritik ekranı baseline profile + macrobenchmark ile kapsamlı ölçün, sonra org-wide adoption.

Sıkça Sorulan Sorular

Compose XML View System’den daha mı hızlı?

Doğru kullanıldığında evet; modern Compose + Baseline Profile XML’den %15-25 daha hızlı startup, frame time’da %20-30 iyileşme. Yanlış kullanılırsa (unstable parameter, key’siz LazyColumn) XML’den yavaş. Google I/O 2025: top 1000 Compose uygulamasının %72’si XML eşdeğeri veya hızlı.

Strong skipping mode tüm sorunları çözer mi?

Hayır. Strong skipping unstable parameter’lar için recomposition’ı azaltır ama equals() comparison maliyeti artar. Heavy parameter’lar için hâlâ immutable + stable pattern tercih edilir. Compose 1.7+ default açık.

Baseline Profile generate etmek ne kadar zaman alır?

Macrobenchmark setup’ı 2-3 saat; profile generation script 1-2 saat; CI integration 4-8 saat. Toplam 1-2 günlük yatırım; performans iyileşmesi %30 startup ve %43 frame time karşılığında ROI yüksek.

derivedStateOf ne zaman kullanılır?

State’lerden türetilen ve sık değişmeyen değerler için. Örnek: scrollState.firstVisibleItemIndex > 5 → “scroll to top button visible” boolean’ı. derivedStateOf, source state değişimi yeniden tetiklemediği sürece downstream recomposition’ı önler.

Compose Multiplatform desktop ve iOS’ta da çalışır mı?

Evet. JetBrains Compose Multiplatform (CMP) 1.6+ ile iOS, desktop (Win/Mac/Linux), web destekli. iOS desteği Stable Q1 2025’te oldu; Lyft, McDonald’s, Skoda erken adopter. KMM ile birleşim aynı UI’i tüm platformlarda paylaşma seçeneği sunuyor.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 23, 2026

    Compose performans sorunlarını ‘cihaz yavaş’ diye geçiştiren ekipler 6 ay sonra Play Store rating’lerini tartışıyor. Doğru tanı için Compose Compiler Metrics + Macrobenchmark + Baseline Profile zorunlu üçlü. Stability’yi @Stable / @Immutable ile zorlamak yerine immutable data class + persistent collection (kotlinx.collections.immutable) tercih edin. LazyColumn’da key parametresini unutmak %40 performans kaybına yol açıyor. — Ömer Önal

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir