GraphQL.cz/Fórum/Expirace cache v Apollo Client

Expirace cache v Apollo Client

Zajímalo by mě, jestli je možné nastavit expiraci cache v Apollo Client. Mám pocit, že moje aplikace někdy zobrazuje zastaralá data a chtěl bych mít větší kontrolu nad tím, jak dlouho se data uchovávají v cache. Vím, že Apollo Client má nějaké možnosti ohledně správy cache, ale nejsem si jistý, jak přesně to funguje. Můžu nastavit dobu vypršení platnosti pro jednotlivé dotazy nebo celou cache jako takovou? A co když chci, aby se cache vyprázdnila po určité době na základě toho, jak často se data mění? Je třeba použít nějakou specifickou funkci, nebo je to všechno součástí standardní konfigurace Apollo Client? Zkoušel jsem to najít v dokumentaci, ale bylo to docela zmatené. Klidně se podělte o nějaké příklady kódu nebo tipy, jak tohle nastavení funguje v praxi. Díky moc za jakoukoli pomoc!

132 slov
1.3 minut čtení
20. 1. 2023
Elena Daňková

Zdar, jak to tak vidím, Apollo Client sám o sobě nemá přímo funkci pro expiraci cache jako takovou. Místo toho se používá něco jako "fetchPolicy" a "cacheTime". Můžeš nastavit fetchPolicy na "network-only" nebo "no-cache", což ti pomůže dostat aktuálnější data, ale zase to neudržuje nic v cache, což může být na škodu.

Pokud chceš mít větší kontrolu nad tím, jak dlouho se data uchovávají, můžeš si napsat vlastní logiku. Například sledovat čas posledního načtení dat a po určité době si prostě znovu načíst data z API. Je to trošku práce navíc, ale aspoň budeš mít jistotu, že se nezobrazujou zastaralý info.

Jako další možnost je použít Apollo Link a tam si napsat middleware, který by spravoval expiraci cache podle tvých potřeb. Ale to už je pro pokročilejší použití. Na základní úrovni se drž fetchPolicy a pokud ti to nestačí, tak si tu logiku prostě přidej sám.

145 slov
1.5 minut čtení
19. 11. 2023
Jan Matějka

Expirace cache v Apollo Client není přímo podporována tak, jak bys to asi chtěl. Můžeš ale použít různé triky, abys dosáhl podobného efektu. Například můžeš nastavit fetchPolicy na cache-and-network, což znamená, že Apollo nejdřív vezme data z cache a pak je aktualizuje z serveru. To ti pomůže mít čerstvější data.

Další možností je ručně invalidovat cache po nějaké době nebo na základě události. Můžeš použít client.resetStore() nebo client.clearStore(), což vyprázdní cache. Ale to není úplně automatické a musíš si to řídit sám.

Pokud chceš spravovat expiraci pro jednotlivé dotazy, můžeš si napsat middleware, který bude monitorovat čas a podle toho rozhodne, jestli data načíst z cache nebo znovu ze serveru. Zkus mrknout na apollo-link-state, pokud chceš mít větší kontrolu nad stavem a cachingem.

Taky se podívej na expireAfter v Apollo Clientu, to je dobrý začátek pro expiraci dat. Určitě to bude chtít trochu experimentování, ale jde to.

145 slov
1.5 minut čtení
1. 8. 2023
Karel Kovář

Co se týče expirace cache v Apollo Client, tak tam přímo není nějaký zabudovaný mechanismus na nastavení expirace jednotlivých dotazů. Ale jsou tady možnosti, jak to obejít. Můžeš třeba použít fetchPolicy, což ti dá víc kontroly nad tím, jak často se dotazy znovu načítají. Například můžeš použít cache-and-network, což zajistí, že se data načtou z cache a zároveň se udělá nový request pro aktualizaci dat.

Pokud potřebuješ nějakou sofistikovanější logiku, můžeš napsat vlastní logiku pro vyprázdnění cache pomocí Apollo Client API – třeba použít client.writeQuery nebo client.resetStore() pro vymazání cache podle potřeby.

Také je fajn si hlídat změny dat na serveru a podle toho udělat invalidaci cache. To můžeš udělat třeba pomocí subscriptions nebo polling, pokud ti to sedí do konceptu aplikace. V dokumentaci je spousta užitečných informací, ale fakt to chce trošku víc experimentovat a přizpůsobit si to podle svých potřeb.

142 slov
1.4 minut čtení
12. 6. 2023
Ladislav Šilhavý
GraphQL.cz/Články/GraphQL caching techniky
Využití Apollo Client pro správu cache v GraphQL aplikacích: Pokročilé tipy a trikyObjevte, jak efektivně využít Apollo Client jako caching layer ve vaší GraphQL aplikaci. Tento článek přináší pokročilé tipy a triky pro optimalizaci ...
1000 slov
10 minut čtení
25. 12. 2021
Lucie Kovářová
Přečíst článek
Podobné otázky