CodeBlanks Logo Icon CodeBlanks

Offline cache

Offline cache stratejisini öğrenirsin.

Çevrimdışı önbellek

Çevrimdışı önbellek, ağdan gelen veriyi yerel depoda tutar; kullanıcı çevrimdışı olduğunda bu veriyi gösterir. AsyncStorage ile veriyi anahtar-değer olarak saklarsın; ağ isteği başarılı olunca veriyi hem ekrana gösterir hem de önbelleğe yazarsın.

Akış şöyledir: önce önbelleği okursun (hızlı görüntü), sonra ağ isteği yaparsın. Ağ başarılı olunca yeni veriyi önbelleğe yazıp ekrana güncellersin; ağ başarısız olunca önbellekteki eski veriyi göstermeye devam edersin. Bu kalıp, kullanıcının her durumda bir içerik görmesini sağlar. Önbellek bir yaşam süresi (TTL) ile de sınırlanabilir; çok eski veri yeniden yüklenir.

Önbellek akışı

Bir çevrimdışı önbellek akışı şu adımlardan oluşur: önce önbellekten veriyi oku, hemen ekrana göster. Sonra ağ isteğini dene; başarılı olursa yeni veriyi hem önbelleğe yaz hem ekrana güncelle. Ağ başarısız olursa önbellekteki veriyi koru.

Bu akış, 'stale-while-revalidate' olarak da bilinir; kullanıcı önce eski veriyi görür, sonra yeni veri gelirse güncellenir. AsyncStorage'a yazarken değer bir dize olmalıdır; nesne saklamak için JSON.stringify ile dizeye çevirirsin. Okurken de JSON.parse ile nesneye geri çevirirsin. Bu dönüştürme önbellek akışının temelidir.

Uygulama Önbellek akışını yaz

fetchWithCache işlevini tamamla. Önce const cached = await AsyncStorage.getItem('user_data') ile önbelleği oku. if (cached) setData(JSON.parse(cached)) ile ekrana yaz. Sonra const fresh = await fetchUser() ile ağı dene. Başarılı olursa await AsyncStorage.setItem('user_data', JSON.stringify(fresh)) ile önbelleğe yaz ve setData(fresh) ile güncelle. fetchUser ve setData parametre olarak verilir.

Başlangıç kodu

App.js
import AsyncStorage from '@react-native-async-storage/async-storage';

export async function fetchWithCache(fetchUser, setData) {
  // önbelleği oku, ağ isteği yap, önbelleği güncelle
}

Örnek çözüm

App.js
const cached = await AsyncStorage.getItem('user_data');
if (cached) setData(JSON.parse(cached));
try {
  const fresh = await fetchUser();
  await AsyncStorage.setItem('user_data', JSON.stringify(fresh));
  setData(fresh);
} catch (e) {
  // ağ hatası; önbellek korunur
}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Önbellek okuma işlevini yaz

Soru
const cached = await AsyncStorage.____('user_data');
Cevap
const cached = await AsyncStorage.getItem('user_data');

Açıklama: getItem önbellekten değer okur.

2 AsyncStorage'a nesne yazarken ne kullanılır?

App.js
await AsyncStorage.setItem('key', ???(data))
  • JSON.parse
  • toString
  • JSON.stringify Doğru cevap
  • String

Açıklama: JSON.stringify nesneyi dizeye çevirir.

3 Adımı amacına eşle

Kavram Anlamı
getItem Önbellek okur
setItem Önbelleğe yazar
JSON.stringify Dizeye çevirir
JSON.parse Nesneye çevirir

İleri seviye bölümündeki tüm dersler