Mobil uygulama performansı, kullanıcı deneyiminin merkezindedir. Yavaş yüklenen, takılan veya çok fazla pil ve veri tüketen uygulamalar kullanıcı kaybına yol açar. Bu yazıda, hem Android hem iOS projelerinde uygulanabilecek 7 ileri seviye teknik üzerinden uygulanabilir öneriler, ölçüm yöntemleri ve dikkat edilmesi gereken noktalar ele alınacaktır.
1. Ölçümle Başlayın: Profiling ve KPI'lar
Her optimizasyonun başlangıç noktası doğru ölçüm almaktır. Aşağıdaki temel KPI'ları izleyin:
- Cold start (ilk başlatma) süresi
- Time to First Paint / Time to Interactive
- İşlem süreleri (UI thread, network, veritabanı)
- Hafıza kullanımı ve garbage collection frekansı
- FPS (frame per second) ve dropped frames
Araçlar: Android Profiler, Systrace, Traceview, Xcode Instruments, Time Profiler, Firebase Performance Monitoring, Sentry Performance, New Relic.
2. İstemci-Server İletişimini Azaltın ve İyileştirin
Network çağrıları genellikle uygulamayı yavaşlatır. İyileştirme stratejileri:
- Batching: Birden fazla küçük isteği tek bir toplu isteğe dönüştürün.
- GraphQL veya gRPC: Sadece ihtiyaç duyulan veriyi çekmek için sorgu düzeyinde kontrol sağlayın.
- HTTP/2 veya QUIC kullanın; paralel ve multiplexed isteklerden faydalanın.
- Request sıkıştırması: gzip veya brotli ile payload küçültme.
- Cache-Control, ETag, If-Modified-Since ile uygun HTTP cache mekanizmalarını kullanın.
Örnek basit bir batched endpoint kullanımı:
POST /batch
{
'requests': [ { 'method': 'GET', 'path': '/user/1' }, { 'method': 'GET', 'path': '/orders?user=1' } ]
}
3. Lazy Loading ve On-Demand Kaynak Yönetimi
Bütün veriyi ve bileşeni başlangıçta yüklemek yerine ihtiyaç duyuldukça yükleyin. Örnek yaklaşımlar:
- Feature modules / dynamic feature delivery (Android App Bundle ile)
- iOS'ta on-demand resources (ODR) ile büyük varlıkları gerektiğinde indirme
- Görüntüleri ve liste öğelerini lazy load yapma; görüntü önbellekleme
- UI'da görünmeyen bileşenleri render etmemek (view virtualization, RecyclerView/UICollectionView reuse)
4. UI Thread İş Yükünü Azaltın
UI thread (Ana thread) üzerine düşen yük, frame drop ve takılmalara neden olur. Yapılabilecekler:
- Ağ, disk ve ağır hesaplamaları arka plana taşıyın (Coroutines, RxJava, Executors, Dispatchers.IO, OperationQueue)
- Render maliyeti yüksek işlemleri optimize edin: karmaşık layout'ları basitleştirin, overdraw'u azaltın
- Listelerde view binding ve diffing kullanarak yeniden çizimleri en aza indirin
- İleri seviye: çalışma zamanı shader, GPU hesaplama ve Metal/Vulkan kullanımı ile bazı işlemleri GPU'ya devredin
5. Görsel İçerik (Resim/Video) Optimizasyonu
Görseller genellikle mobil uygulamalarda en büyük yer tutan varlıklardır. İpuçları:
- Boyuta göre uygun çözünürlükte resim sunun; ekran yoğunluğuna göre scaled varlıklar kullanın
- Modern formatlar: WebP, AVIF (destek varsa) ile dosya boyutlarını düşürün
- Image loading kütüphanelerini (Glide, Coil, Picasso, SDWebImage, Kingfisher) kullanarak disk ve bellek önbellekleme uygulayın
- Görüntüleri lazy load yapın ve placeholder/blurred preview gösterin
Örnek Glide kullanımı:
Glide.with(context).load(url).override(720,480).centerCrop().into(imageView)
6. Hafıza Yönetimi ve Sızıntı Tespiti
Memory leak'ler performansı ve stabiliteyi bozar. Yapılacaklar:
- Profil araçlarıyla bellek snapshot'ları alın; leak detection (LeakCanary, XcodeLeaks) kullanın
- Observer'ları, callback'leri ve long-lived referansları doğru temizleyin
- Gereksiz object allocation azaltın; object pool (recycle) kullanımı ile GC yükünü düşürün
- Konteynerlerde büyük veri setlerini parça parça saklayın; memory-mapped I/O seçeneklerini değerlendirin
7. Derleme ve Paketleme Optimizasyonları
Uygulamanın çalışma zamanı performansı ve boyutu, build zamanı ayarlarıyla doğrudan ilişkilidir:
- Code shrinking ve minification: R8/ProGuard ile gereksiz kodu kaldırın
- App Bundles / IPA slicing: sadece gerekli architecture ve kaynakları paketleyin
- Native kod optimizasyonları: NDK ile performans kritik kısımları optimize edin, compiler optimizasyon seviyelerini kontrol edin
- Swift için optimization flags, LLVM ve bitcode ayarlarını gözden geçirin
Uygulama Başlatma Süresini (Cold Start) Azaltma
Başlatma süresi, kullanıcı memnuniyeti için kritik bir metriktir. Yaklaşımlar:
- İlk ekranda sadece gerekli minimum UI ve veri gösterin; diğer init işlemlerini arka plana erteleyin
- Lazy initialization: Singleton ve büyük yapıları ihtiyaç olunca başlatın
- Splash ekranı ile algılanan yükleme süresini azaltın; fakat gerçek optimizasyonun yerini almaz
Ölçme-İzleme ve Sürekli İyileştirme
Yukarıdaki teknikleri uyguladıktan sonra sahadaki performansı izlemek önemli. CI/CD sürecine performans testlerini ekleyin (benchmarking tests, instrumentation tests). Rollout sırasında yüzde tabanlı dağıtım (staged rollout) ile farklı cihazlarda gözlemleyin. Kullanıcı raporları ve otomatik monitöring (crash + performance) ile geri bildirim döngüsü oluşturun.
Sonuç ve Özet Kontrol Listesi
Özet olarak kontrol edilecekler:
- KPI'ları belirle ve profiling ile başlayın
- Network çağrılarını optimizasyon yöntemiyle azaltın
- Lazy loading ve dynamic feature ile başlangıcı hafifletin
- UI thread yükünü asenkronlaştırın
- Görselleri modern format ve uygun boyutta sunun
- Memory leak'leri tespit edip düzeltin
- Build/packaging optimizasyonları ile uygulama boyutunu küçültün
Bu teknikleri uygularken her değişikliğin etkisini ölçün ve veriyle desteklenmiş kararlar alın. Sen Ekolsoft olarak, projelerinizde bu adımları uygulamanıza yardımcı olabiliriz — ihtiyacınız olursa teknik değerlendirme ve performans optimizasyon hizmetlerimizle destek veririz.