Apollo Önbelleği: Normalleştirme ve Güncellemeler
Apollo'nun normalleştirilmiş InMemoryCache yapısını anlayıp değişikliklerden sonra yeniden veri almadan önbelleğe alınmış verileri güncelleyin
Apollo Önbelleği: Normalleştirme ve Güncellemeler, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.
InMemoryCache Verileri Nasıl Normalleştirir
InMemoryCache her nesneyi __typename ve id'den oluşan bir önbellek anahtarıyla saklar: User:1, Post:42. Bir sorgu id'si "1" olan bir User döndürdüğünde, bu nesne kaç farklı sorguda yer alırsa alsın bu anahtar altında yalnızca bir kez saklanır.
Aynı User:1'i getiren sonraki her sorgu tek önbellek girdisinden okur; böylece tüm bileşenler aynı verileri görür.
Sorgular Arası Otomatik Güncellemeler
Bir mutasyon güncellenmiş bir User:1 nesnesi döndürdüğünde Apollo bunu User:1 önbellek girdisine yazar. User:1'i içeren her etkin sorgu, ek kod gerektirmeden kullanıcı arayüzünde güncellenen alanları otomatik olarak gösterir.
Bu otomatik yayılım, normalleştirilmiş önbelleğin belge (sorgu anahtarlı) önbelleğe göre başlıca avantajıdır.
cache.readQuery
Bir sorgunun önbellekteki güncel sonucunu okuyun: cache.readQuery({ query: GET_USERS }) veriyi, useQuery döndürmüş gibi bir veri nesnesi olarak döndürür. Sorgu önbellekte yoksa null döndürür.
Bir mutasyonun update işlevlerinde, üzerinde değişiklik yapmadan önce güncel listeyi okumak için readQuery kullanın.
cache.writeQuery
cache.writeQuery({ query: GET_USERS, data: { users: updatedUsers } }) doğrudan önbelleğe yazar ve GET_USERS'ı okuyan tüm bileşenlerde yeniden oluşturmayı tetikler. Ağ isteği yapılmaz.
Değişmez önbellek güncellemeleri uygulamak için readQuery ve writeQuery'yi birleştirin: okuyun, yeni bir dizi oluşturun ve yeniden yazın.
Doğrudan Varlık Güncellemeleri için cache.modify
cache.modify({ id: cache.identify(user), fields: { name: () => 'New Name' } }) belirli bir önbelleğe alınmış varlığın alanlarını doğrudan değiştirir. Önbellek kimliğini biliyorsanız önce bir sorgu okumanız gerekmez.
fields nesnesi, alan adlarını geçerli değeri alan ve yeni değeri döndüren değiştirici işlevlerle eşler.
Mutasyondan Sonra Önbelleği Güncelleme
useMutation'a bir update işlevi geçirin: useMutation(ADD_POST, { update(cache, { data: { addPost } }) { cache.modify({ id: cache.identify(user), fields: { posts: existingPosts => [...existingPosts, addPost] } }); } }).
Bu işlem yeni gönderiyi kullanıcının önbelleğe alınmış gönderi dizisinin sonuna ekler ve kullanıcının gönderi listesini görüntüleyen tüm bileşenleri günceller.
cache.evict: Önbellek Girdilerini Kaldırma
cache.evict({ id: 'User:1' }) User:1 girdisini önbellekten kaldırır. User:1'i içeren etkin sorgular, bu varlık sonuçta eksik olacak şekilde yeniden oluşturulur.
Girdileri kaldırdıktan sonra, artık kök sorgulardan erişilemeyen nesneleri silmek için cache.gc() çağrısını yapın. Bu, uzun süre çalışan uygulamalarda bellek sızıntılarını önler.
Çöp Toplama
cache.gc() tüm etkin sorgulardan başlayarak önbellek grafiğini dolaşır ve artık erişilemeyen varlıkları kaldırır. Düzenli aralıklarla veya çok sayıda varlığı silen toplu mutasyonlardan sonra güvenle çağrılabilir.
Etkin useQuery kancalarının başvurduğu varlıklar hiçbir zaman çöp toplanmaz; yalnızca artık hiçbir sorgu sonucunun parçası olmayan yetim varlıklar toplanır.
Alan Politikalarıyla Önbellek Yönlendirmeleri
Bir liste sorgusunun parçası olarak zaten önbelleğe alınmış tek bir varlığı (id'ye göre GET_USER) sorgularsanız Apollo, tür politikasındaki keyArgs ve read işlevlerini kullanarak ağ üzerinden gidiş-dönüş yapmadan bu varlığı önbellekten okuyabilir.
read işlevi bir önbellek referansı döndürür: return toReference({ __typename: 'User', id: args.id }), Apollo'ya mevcut User:id önbellek girdisinden okumasını söyler.
Standart Dışı Kimlikler için Özel keyFields
Varlıklarınız benzersiz anahtar olarak id yerine başka bir alan (örneğin slug veya uuid) kullanıyorsa bunu tür politikasında yapılandırın: new InMemoryCache({ typePolicies: { Post: { keyFields: ['slug'] } } }).
Apollo daha sonra id alanı gerektirmek yerine önbellek anahtarı olarak Post:my-post-slug kullanır ve standart dışı şemalarda normalleştirmeyi korur.
refetchQueries ile update İşlevinin Karşılaştırılması
useMutation seçeneklerindeki refetchQueries: [{ query: GET_USERS }] ifadesi, mutasyon tamamlandıktan sonra ağ üzerinden yeniden getirme işlemini tetikler. Daha basittir ancak her zaman bir ağ isteği yapar.
update işlevi önbelleği yerel olarak değiştirir ve ağ üzerinden gidiş-dönüşü önler. Önbellek güncelleme mantığını yazmak çok karmaşık olduğunda veya sunucu tarafından hesaplanan alanlar yerel önbellek güncellemelerini güvenilmez kıldığında refetchQueries kullanın.
InMemoryCache Normalleştirme Anahtarı
InMemoryCache'in varlıkları depolamak için kullandığı varsayılan önbellek anahtarı biçimi nedir?
Ders Özeti
InMemoryCache, varlıkları __typename+id ile normalleştirerek sorgular arası otomatik güncellemeleri mümkün kılar. Önbelleği cache.readQuery, cache.writeQuery ve cache.modify ile okuyun veya yazın. Varlıkları cache.evict ve ardından cache.gc ile kaldırın. id dışındaki birincil anahtarlar için özel anahtar alanlarını typePolicies üzerinden yapılandırın.
Yerel önbellek verimliliği için mutasyon update işlevlerini kullanın; sunucu tarafından hesaplanan alanlar yerel güncellemeleri güvenilmez kıldığında refetchQueries kullanın.
Sıkça Sorulan Sorular
“Apollo Önbelleği: Normalleştirme ve Güncellemeler” dersi ücretsiz mi?
Evet — “Apollo Önbelleği: Normalleştirme ve Güncellemeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.
“Apollo Önbelleği: Normalleştirme ve Güncellemeler” dersinde ne öğreneceğim?
Apollo'nun normalleştirilmiş InMemoryCache yapısını anlayıp değişikliklerden sonra yeniden veri almadan önbelleğe alınmış verileri güncelleyin React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
React Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Apollo Önbelleği: Normalleştirme ve Güncellemeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu React Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- React Geliştiricileri için GraphQL Temelleri
- React'te Apollo Client Kurulumu
- useQuery ve useMutation Kancaları
- Apollo Önbelleği: Normalleştirme ve Güncellemeler