Cache Neden Bu Kadar Önemli?
Mobil uygulamalarda cache, hem kullanıcı deneyimini hem de backend maliyetlerini doğrudan etkiler. Doğru cache stratejisi ile:
- Uygulama ekranları anında açılır
- Mobil veri kullanımı azalır
- Backend'e gelen istek sayısı düşer
- Offline durumda bile uygulama kullanılabilir kalır
Cache stratejisi belirlerken verinin ne kadar taze olması gerektiğini ve tutarsız veri göstermenin riskini dengede tutmanız gerekir.
HTTP Cache Headers
Cache-Control
En önemli cache header'ıdır. Direktifler:
- max-age=3600: 3600 saniye boyunca cache'ten servis et
- no-cache: Cache'te sakla ama her seferinde sunucuya doğrulat
- no-store: Hiç cache'leme (hassas veriler için)
- private: Sadece client cache'leyebilir
- public: CDN dahil herkes cache'leyebilir
- stale-while-revalidate=60: Eski veriyi göster, arka planda güncelle
ETag ve Last-Modified
ETag: sunucu her response'a hash ekler, client sonraki istekte If-None-Match ile gönderir. Veri değişmemişse 304 Not Modified döner. Last-Modified benzer mantıkla tarih kullanır.
Pratik Kombinasyonlar
- Statik asset'ler: Cache-Control: public, max-age=31536000, immutable
- API listeler: Cache-Control: private, max-age=60, stale-while-revalidate=300
- Kullanıcı profili: Cache-Control: private, no-cache (ETag ile doğrulama)
- Ödeme/auth: Cache-Control: no-store
CDN Cache Katmanı
CDN (Cloudflare, CloudFront, Fastly) sunucunuzun önünde cache katmanı oluşturur. Kullanıcıya en yakın edge noktasından içerik servis edilir.
- Statik dosyalar CDN'den servis edilmeli
- API response cache'lemek dikkat gerektirir (kullanıcıya özel veri!)
- Cache purge mekanizması kurun
- Vary header ile farklı versiyonları ayırt edin
Server-Side Cache
Redis
En yaygın server-side cache. In-memory key-value store olarak çalışır. TTL ile otomatik expire, Pub/Sub ile cache invalidation. Upstash Redis serverless ortamlar için popüler.
In-Memory Cache
node-cache veya lru-cache paketleri. Cok hızlı erişim ama birden fazla instance varsa senkronizasyon sorunu, restart ile veri kaybı.
Client-Side Cache
| Araç | Platform | Hız | Kullanım |
|---|---|---|---|
| AsyncStorage | React Native | Orta | Basit key-value |
| MMKV | React Native | Cok hızlı | Tercih edilen key-value |
| SQLite | iOS/Android/RN | Hızlı | Yapısal veri, sorgulama |
| Core Data | iOS | Hızlı | iOS native veri katmanı |
| Room | Android | Hızlı | Android native ORM |
| WatermelonDB | React Native | Hızlı | Lazy loading, sync |
MMKV, WeChat tarafından geliştirilen C++ tabanlı key-value store'dur. AsyncStorage'a göre 30-50x daha hızlıdır. 2026'da React Native projelerinde standart haline gelmiştir.
React Query / TanStack Query
Server state management ve caching konusunda en popüler çözüm.
- staleTime: Verinin taze kabul edilme süresi
- gcTime: Kullanılmayan verinin bellekte tutulma süresi
- refetchOnWindowFocus: Ön plana geldiğinde refetch
- refetchOnReconnect: Bağlantı geldiğinde refetch
SWR: Vercel'in alternatifi. Cache'teki eski veriyi anında gösterir, arka planda günceller. Her iki kütüphane de optimistic update, infinite scroll, prefetching ve mutation sonrası cache invalidation destekler.
Image Caching
Görseller en büyük bant genişliği tüketicisidir.
- React Native: react-native-fast-image veya expo-image
- iOS Native: SDWebImage veya Kingfisher
- Android Native: Glide veya Coil
Temel prensipler: CDN'den servis edin, farklı boyutlarda thumbnail oluşturun, WebP/AVIF formatlarını tercih edin, blur hash ile yükleme deneyimini iyileştirin.
Cache Invalidation
- TTL bazlı: Belirli süre sonra otomatik expire (en basit)
- Event bazlı: Veri değiştiğinde cache key'ini sil (en doğru)
- Versiyon bazlı: URL'e versiyon ekle
- Tag bazlı: İlişkili key'leri tag'le, tag'i invalidate et
Cache-First vs Network-First
- Cache-first: Önce cache'e bak, yoksa network'e git. Hız öncelikli senaryolar
- Network-first: Önce network'e git, hata olursa cache'e dön. Güncellik öncelikli
- Stale-while-revalidate: Cache'ten göster, arka planda güncelle. En iyi denge
Cache stratejisi uygulamanızın doğasına göre şekillenir. Veri hassasiyetini, güncellik ihtiyacını ve kullanıcı beklentisini analiz ederek doğru stratejiyi uygulayın.