Performance Neden Önemli?
- Kullanıcıların %53'ü 3 saniyeden uzun yüklenen uygulamayı terk ediyor
- Yavaşlık 1 yıldız yorumların en sık nedeni
- Apple ve Google performans store sıralama faktörü
- Kötü performans = yüksek churn
- 2026 itibarıyla Apple ve Google, store listelemelerde performans metriklerini daha fazla ağırlıklandırıyor
Temel Metrikler
App Startup Time
- Cold start: Uygulama bellekte değil, sıfırdan açılış
- Warm start: Bellekte ama arka planda
- Hedef: < 2 saniye (cold start)
- Apple: MetricKit ve App Launch Optimization ile ölçüm
- Android: Startup Trace ile ölçüm
Frame Rate
- 60 FPS hedef (16.67ms/frame)
- ProMotion ekranlar: 120 FPS (8.33ms/frame)
- Dropped frames = "jank" (takılma hissi)
- Scroll ve animasyonlarda kritik
- Kullanıcılar 3+ dropped frame'i fark eder
Memory Usage
- RAM tüketimi (resident memory)
- Memory leak tespiti
- Low memory uyarıları
- iOS: Jetsam ile OOM kill (sistem uygulamayı öldürür)
- Android: onTrimMemory() callback'i
Battery Usage
- CPU kullanımı
- Network kullanımı
- Konum/bluetooth süresi
- Arka plan işleri
- Apple: Xcode Energy Organizer ile ölçüm
- Android: Battery Historian
Network
- API yanıt süreleri (P50, P95, P99)
- Payload boyutları
- Bağlantı hataları
- DNS resolution süresi
Profiling Araçları
iOS
- Xcode Instruments: CPU, memory, network, energy profiling
- MetricKit: Production performans metrikleri (iOS 13+)
- Xcode Organizer: App Store'dan gelen performans verileri
- Xcode Memory Graph: Memory leak görselleştirme ve retain cycle tespiti
Android
- Android Studio Profiler: CPU, memory, network, energy (gerçek zamanlı)
- Android Vitals: Play Console'da performans raporları (startup, ANR, crash)
- Systrace / Perfetto: Sistem seviyesinde profiling (frame timing)
- LeakCanary: Otomatik memory leak tespiti (development)
React Native
- Flipper: Debug aracı (network, layout, performance)
- React DevTools: Component render profiling (why did this render?)
- Hermes Profiler: JS engine profiling (CPU sampling)
- react-native-performance: Startup ve screen load ölçümü
- React Native New Architecture: Fabric renderer ile daha iyi performans
Cross-Platform
- Firebase Performance Monitoring: Startup, network, custom traces
- Sentry Performance: Transaction tracing, span analizi
Optimizasyon Teknikleri
Startup
- Lazy loading: Gerekmeyeni sonra yükle
- Splash screen ile algı yönetimi
- Heavy initialization'ı background thread'e taşı
- Modüler mimari: Sadece gerekli modülleri başlangıçta yükle
UI/Rendering
- FlatList / FlashList / RecyclerView kullan (uzun listeler)
- Image caching ve lazy loading (react-native-fast-image)
- Gereksiz re-render'ları önle (React.memo, useMemo, useCallback)
- Animasyonları native driver ile çalıştır (useNativeDriver: true)
- Large list'lerde getItemLayout ile scroll optimizasyonu
Memory
- Büyük görsel/videoyu ekrandan çıktığında release et
- Listener/subscription'ları temizle (cleanup, useEffect return)
- Weak reference kullan (cache)
- Memory leak'leri profiler ile düzenli kontrol et
Network
- Gzip/Brotli compression
- Pagination (tüm veriyi bir anda çekme)
- Cache stratejisi (stale-while-revalidate, TanStack Query)
- Image optimization (WebP format, boyut uyarlama)
- Background fetch ile önceden veri çekme
Performans optimizasyonu ölçümle başlar. Önce ölç, sonra optimize et. Sezgileriniz yanıltabilir.