React Native ile mobil uygulama geliştirirken kullanıcı verilerini cihazda kalıcı olarak saklamak sıkça ihtiyaç duyulan bir özelliktir. AsyncStorage, Redux Persist ve MMKV bu alanda en popüler çözümler arasında yer alır. Peki hangisi projeniz için daha uygun? Bu yazıda bu üç kütüphaneyi performans, kullanım kolaylığı, veri güvenliği ve ölçeklenebilirlik açısından derinlemesine karşılaştırıyor, doğru seçimi yapmanız için pratik ipuçları sunuyoruz.
AsyncStorage: React Native'in Yerleşik Depolama Çözümü
AsyncStorage, React Native ile birlikte gelen, basit anahtar-değer tabanlı bir depolama sistemidir. Küçük ve orta ölçekli projeler için hızlı bir başlangıç sağlar. Ancak büyük veri kümelerinde performans sorunları yaşanabilir. AsyncStorage verileri cihazda şifresiz olarak saklar, bu nedenle hassas bilgiler için güvenli değildir.
AsyncStorage'ın Avantajları
- Herhangi bir ek bağımlılık gerektirmez.
- Küçük veri miktarlarında (birkaç KB) yeterli performans sunar.
- Basit API'si sayesinde öğrenmesi kolaydır.
AsyncStorage'ın Dezavantajları
- Senkron olmayan yapısı büyük verilerde gecikmelere yol açabilir.
- Veri şifreleme desteği yoktur.
- Karmaşık veri yapılarını (iç içe objeler) yönetmek zordur.
Redux Persist: Redux Durumunuzu Kalıcı Hale Getirin
Redux Persist, Redux store'unuzu otomatik olarak AsyncStorage veya MMKV gibi bir depolama motoruna kaydeden bir kütüphanedir. Özellikle büyük ve karmaşık durum yönetimi gerektiren uygulamalarda idealdir.
Redux Persist ile Çalışma Prensipleri
Redux Persist, uygulama her açıldığında saklanan durumu geri yükler ve tüm state değişikliklerini periyodik olarak diske yazar. Bu sayede kullanıcı oturum bilgileri, tercihler veya offline veriler sorunsuz bir şekilde korunur. Kullanıcı deneyimini artırmak için push notification gibi özelliklerle entegre edilebilir.
Redux Persist'in Güçlü Yönleri
- Redux ile sorunsuz entegrasyon, state'in tamamını veya bir kısmını saklayabilme.
- Blacklist/whitelist filtreleme ile hangi reducer'ların kalıcı olacağını kontrol etme.
- Şifreleme için transform kullanma imkanı (örn. redux-persist-transform-encrypt).
Redux Persist ile Dikkat Edilmesi Gerekenler
- AsyncStorage üzerine kurulu olduğunda temel depolama motoru yavaş olabilir.
- Migrate fonksiyonu ile schema değişikliklerini yönetmek gerekir.
- Büyük state'lerde serialization/deserialization maliyeti artar.
MMKV: Yüksek Performanslı Depolama Motoru
MMKV, WeChat ekibi tarafından geliştirilen, memory-mapped dosyalar kullanan hızlı bir anahtar-değer deposudur. iOS ve Android'de yerel kütüphanelerle çalıştığı için AsyncStorage'dan çok daha hızlıdır. Özellikle büyük veri setleri ve sık okuma/yazma işlemleri için idealdir.
MMKV'nin Teknik Üstünlükleri
- Senkron okuma/yazma sayesinde işlem süreleri milisaniyenin altına iner.
- Veriyi şifreleyerek saklama desteği (AES-128).
- Çoklu iş parçacığı (thread-safe) ve işlem (process-safe) desteği.
Karşılaştırma Tablosu
| Özellik | AsyncStorage | Redux Persist (AsyncStorage) | MMKV |
|---|---|---|---|
| Performans (okuma/yazma hızı) | Yavaş (ortalama 10-20 ms) | AsyncStorage'a bağlı | Çok hızlı (ortalama <1 ms) |
| Şifreleme desteği | Yok | Eklenti ile mümkün | Yerleşik (AES-128) |
| Karmaşık veri yapıları | Zor (manuel JSON serileştirme) | Otomatik (serialization) | Anahtar-değer, JSON serileştirme gerekli |
| Redux entegrasyonu | Mevcut değil | Doğal | Redux Persist motoru olarak kullanılabilir |
| Paket boyutu (yaklaşık) | ~10 KB | ~20 KB + AsyncStorage | ~100 KB (native kod) |
| Önerilen kullanım senaryosu | Çok küçük veriler, prototip | Redux ile state persist etme | Yüksek performans gerektiren uygulamalar |
Hangi Durumda Hangi Kütüphaneyi Seçmelisiniz?
Seçim yaparken projenizin ihtiyaçlarını değerlendirmeniz gerekir. İşte bazı yönlendirici sorular:
Küçük ve Basit Bir Uygulama mı Geliştiriyorsunuz?
Eğer birkaç kullanıcı tercihini veya basit bir token'ı saklayacaksanız, AsyncStorage yeterlidir. Ancak ileride ölçeklenme ihtimaline karşı MMKV'ye geçişi kolaylaştırmak için soyutlama katmanı eklemeyi düşünün.
Redux Kullanıyor ve Oturum Bilgilerini Korumak mı İstiyorsunuz?
Redux Persist, özellikle logout/login akışlarında state'i sıfırlamadan uygulama kapatıldığında kullanıcı verilerini kaybetmemek için idealdir. Hassas veriler için şifreleme transform'u eklemeyi unutmayın.
Uygulamanızın Performansı Kritik mi?
Eğer sık sık veri okuma/yazma işlemi yapıyorsanız (örneğin anlık mesajlaşma, canlı veri akışı), MMKV en iyi seçenektir. Ayrıca MMKV, Hermes motoru ile birlikte kullanıldığında uygulama başlatma süresini önemli ölçüde azaltabilir.
Sık Yapılan Hatalar ve Kaçınılması Gerekenler
- Hassas Verileri Şifresiz Saklamak: AsyncStorage'da şifrelenmemiş kullanıcı şifreleri veya API anahtarları saklamak büyük bir güvenlik açığıdır. Her zaman şifreleme kullanın veya MMKV'yi tercih edin.
- Büyük Verileri AsyncStorage'da Saklamak: AsyncStorage 6 MB sınırına sahiptir ve bu sınıra yaklaşıldığında performans ciddi şekilde düşer. Büyük blob'lar için MMKV veya dosya sistemi kullanın.
- Redux Persist'te Schema Migration'ı Atlamak: Uygulama güncellemelerinde state yapısı değişirse, eski veriler uyumsuzluk yaratabilir. Her zaman migrate fonksiyonu tanımlayın.
- Performans Testi Yapmamak: Her projenin veri erişim deseni farklıdır. Seçtiğiniz kütüphaneyi gerçek cihazlarda profillemeden karar vermeyin.
Pratik Öneriler ve İpuçları
Projenize başlamadan önce aşağıdaki adımları izleyerek doğru teknolojiyi seçebilirsiniz:
- Veri boyutunuzu ve okuma/yazma sıklığınızı belirleyin.
- Güvenlik gereksinimlerinizi netleştirin (KVKK, GDPR vb.).
- Küçük bir prototip üzerinde üç kütüphaneyi de test edin.
- Uygulamanızda No-Code araçlarla API entegrasyonu yapıyorsanız, Bubble ile API entegrasyonu yazımızdaki veri yönetimi prensiplerinden faydalanabilirsiniz.
- Gelecekte geçiş yapmanız gerektiğinde kodunuzu değiştirmemek için bir depolama soyutlama katmanı (repository pattern) oluşturun.
Sonuç: Hangi Kütüphane Projeniz İçin En İyisi?
AsyncStorage basit projeler için hızlı bir çözüm sunarken, Redux Persist state yönetimi ile birlikte kalıcılık sağlar. MMKV ise yüksek performans ve güvenlik gerektiren uygulamalar için en iyi seçenektir. Eğer uygulamanız büyümeye başladıysa ve performans sorunları yaşıyorsanız, MMKV'ye geçiş yapmak uzun vadede size kazandıracaktır. Unutmayın, her teknolojinin kullanım amacına uygun olduğu bir senaryo vardır; doğru analizle en verimli çözümü bulabilirsiniz.
Mobil uygulama geliştirme yolculuğunuzda başka hangi konularda rehberlik almak istersiniz? Yorumlar bölümünde bizimle paylaşın!
Sık Sorulan Sorular
AsyncStorage ve MMKV arasındaki temel fark nedir?
AsyncStorage JavaScript tabanlı ve senkron olmayan bir yapıya sahipken, MMKV native (C++) bir kütüphane olup memory-mapped dosya kullanır. Bu sayede MMKV çok daha hızlı okuma/yazma sunar ve AES-128 şifreleme desteğiyle daha güvenlidir.
Redux Persist performansı artırmak için MMKV ile kullanılabilir mi?
Evet, Redux Persist'in storage alanına MMKV'yi atayarak AsyncStorage yerine MMKV'yi kullanabilirsiniz. Bu sayede Redux state'inin kalıcılığı çok daha hızlı olur ve uygulama başlatma süresi kısalır.
Hassas veriler (şifre, API anahtarı) için hangi depolama yöntemini önerirsiniz?
Hassas veriler mutlaka şifrelenmiş olarak saklanmalıdır. MMKV'nin yerleşik şifrelemesi veya Redux Persist ile şifreleme transform'u kullanmanızı öneririz. AsyncStorage şifreleme sunmadığı için hassas veriler için kesinlikle kullanılmamalıdır.
Büyük veri setleri (örneğin offline tablolar) için hangisi daha uygundur?
MMKV büyük veri setlerinde (birkaç MB) AsyncStorage'a göre çok daha iyi performans gösterir. Ancak gerçekten büyük veriler için SQLite veya Realm gibi veritabanı çözümlerini değerlendirmek daha doğru olacaktır.






