Skip to content

Düzen Performansı ​

Layout performansı, UI'ın ölçüm ve yerleşim işini frame budget içinde bitirebilmesidir. Sorun çoğu zaman tek bir büyük view değil, sık tekrarlanan küçük layout hesaplarıdır.

Hızlı Karar ​

DurumYaklaşımDikkat
Nested layout fazlaFlatten layoutOkunabilirliği tamamen bozma
Liste item yavaşSabit/öngörülebilir ölçüDynamic height maliyetlidir
Responsive ekranConstraint dikkatli kullanConstraint zinciri büyümesin
Sık state değişimiRecomposition/layout scope daraltTüm ekran yenilenmesin

Üretim Kontrol Listesi ​

  • Problem: Layout hangi ekranda kaç ms sürüyor?
  • Çözüm: View hierarchy, constraint count, invalidation scope ve placeholder boyutları net mi?
  • Trade-off: Esnek layout bakım kolaylığı sağlar; ölçüm maliyetini artırabilir.
  • Hata durumu: Layout thrashing, text overflow, infinite constraints ve orientation bug ele alınmalı.
  • Ölçüm: Layout time, measure count, re-layout frequency, frame time ve jank rate izlenmeli.
  • Güvenlik/maliyet: Dynamic font/accessibility boyutları desteklenmeli; layout test matrisi cihaz maliyeti getirir.

Düzen Optimizasyonu Temelleri ​

Düzen Sürecini Anlama ​

  • Ölçüm Aşaması: View boyutlarının hesaplanması
  • Düzen Aşaması: View pozisyonlarının belirlenmesi
  • Çizim Aşaması: Canvas'a çizim işlemi

Android Düzen Optimizasyonu ​

ConstraintLayout En İyi Uygulamaları ​

kotlin
// Optimize Edilmiş ConstraintLayout Örneği
class OptimizedConstraintLayout : ConstraintLayout {
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        // Performans için özel ölçüm mantığı
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }
}

View Hiyerarşisini Düzleştirme ​

kotlin
// İç içe LinearLayout'ları düzleştirme
fun flattenLinearLayouts(parent: ViewGroup) {
    for (i in 0 until parent.childCount) {
        val child = parent.getChildAt(i)
        if (child is LinearLayout && child.childCount == 1) {
            // Düzleştirmeyi düşün
        }
    }
}

iOS Auto Layout Optimizasyonu ​

Kısıtlama Önceliği Yönetimi ​

swift
// iOS Auto Layout Optimizasyonu
class OptimizedAutoLayoutView: UIView {
    override func layoutSubviews() {
        super.layoutSubviews()
        // Özel düzen optimizasyonu
    }
    
    func optimizeConstraints() {
        // Kısıtlama karmaşıklığını azalt
        constraints.forEach { constraint in
            if constraint.priority.rawValue < 1000 {
                constraint.priority = UILayoutPriority(999)
            }
        }
    }
}

Flutter Düzen Performansı ​

Verimli Widget Kompozisyonu ​

dart
// Flutter Düzen Optimizasyonu
class OptimizedLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // Mümkün olduğunda const yapıcıları kullan
        const Text('Statik Metin'),
        // Widget yeniden oluşturmalarını minimize et
        RepaintBoundary(
          child: CustomPainter(
            painter: OptimizedPainter(),
          ),
        ),
      ],
    );
  }
}

Performans İzleme ​

Düzen Performans Metrikleri ​

kotlin
// Android Düzen Performans İzleme
class LayoutPerformanceMonitor {
    fun measureLayoutTime(view: View): Long {
        val startTime = System.nanoTime()
        view.measure(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
        )
        return System.nanoTime() - startTime
    }
}

Eren Demir tarafından oluşturulmuştur.