Mi a gyorsítótárazás? Közérthető útmutató appépítőknek
A gyorsítótárazás azt jelenti, hogy készen tartunk egy másolatot valamiből, amit lassú vagy drága volt megszerezni, így a következő kérést innen lehet gyorsan megválaszolni. A mentett másolatot gyorsítótárnak (cache) hívjuk. A böngésződ gyorsítótárazza a képeket, hogy egy oldal a második látogatásnál gyorsabban töltsön be; a szerver pedig a lassú adatbázis-lekérdezés eredményét tárolja, hogy ne kelljen minden látogatónak újra lefuttatnia.
A gyorsítótárazás gyorsabbá és olcsóbban futtathatóvá teszi az appokat. Az egyetlen nagy kompromisszuma, hogy a másolat elavulhat.
Miért fontos a gyorsítótárazás, ha AI-val építesz
Az AI-val épített appokban három módon találkozhatsz vele:
- „Frissítettem az appot, de még mindig a régi verziót látom.” Ez a leggyakoribb gyorsítótár-helyzet, és általában ártalmatlan – a böngésződ vagy egy CDN a mentett másolatot mutatja.
- Sebesség. Ha egy oldal lassú, mert minden látogatónak újraszámolja ugyanazokat az értékeket, az eredmény gyorsítótárazása szinte azonnalivá teheti.
- Költség. Sok AI-építő és hoszt számláz számítási időt, adatbázis-használatot és külső API-hívásokat. Ha ezer látogató ugyanazt a drága kérést indítja el, a gyorsítótárazás csak egyszer fizettet meg vele.
Az alapok ismerete segít abban, hogy ott kérj gyorsítótárazást, ahol segít, és felismerd, ha az az ok, amiért valami furcsának látszik.
Mindennapi hasonlat
Gondolj egy forgalmas kávézó konyhájára.
A barista minden rendelésnél frissen őrölt babból főzhetne kávét. Ez lassú. Ehelyett egy kancsó filteres kávét tart készen a melegítőn. A legtöbb vendég másodpercek alatt kap csészét – ez egy találat (cache hit). Amikor a kancsó kiürül, valaki főz újat – ez egy mellétalálás (cache miss).
De a kávé, ha túl sokáig áll, elromlik, ezért a kávézónak szabálya van: a 30 percnél régebbi kancsót ki kell dobni. Ez a szabály a gyorsítótár lejárati ideje. Senki nem tartaná egész nap ugyanazt a kancsót, és senki nem főzne előre egy különleges rendelést zabtejjel és három cukorral – egyes dolgokat egyáltalán nem szabad gyorsítótárazni.
Hol élnek a gyorsítótárak
Egyetlen oldalbetöltés több gyorsítótáron is áthaladhat, a felhasználótól a legtávolabbiig:
| Gyorsítótár | Hol van | Mit tárol általában | Példa |
|---|---|---|---|
| Böngésző-gyorsítótár | A látogató eszközén | Képek, stíluslapok, szkriptek, betűtípusok | A logód azonnal betölt a második oldalon |
| CDN-gyorsítótár | Világszerte, a látogatók közelében lévő szervereken | Statikus fájlok és néha teljes oldalak | Egy tokiói látogató egy közeli szerverről kapja a fájlokat, nem a saját forrásodból |
| Alkalmazás-gyorsítótár | A szervereden vagy mellette, gyakran memóriában vagy Redisben | Lassú lekérdezések vagy külső API-hívások eredményei | A mai árfolyamok, óránként egyszer lekérve |
| Adatbázis-gyorsítótár | Az adatbázison belül | A közelmúltban használt adatok és lekérdezési tervek | A népszerű sorok gyors memóriában maradnak |
A CDN (tartalomkézbesítő hálózat) lényegében az oldalad fájljainak világméretű gyorsítótár-hálózata.
Hogyan dönti el egy gyorsítótár, mit tart meg
Minden gyorsítótárnak ugyanazokra a kérdésekre kell választ adnia:
- Mi gyorsítótárazható? A nyilvános, megosztott adat (egy termékkép, egy blogbejegyzés) – igen. A privát adat (egy felhasználó fiókoldala, az üzenetei) – soha nem megosztott gyorsítótárban.
- Meddig? Ez a TTL (élettartam, time to live). Egy logó akár egy évig is lehet gyorsítótárban; egy készletszint 30 másodpercig.
- Hogyan frissül? Vagy lejár a másolat és újra lekérik, vagy az app szándékosan eltávolítja, amikor az adat megváltozik – ezt érvénytelenítésnek (invalidation) hívjuk.
Weboldalaknál a szerver megmondja a böngészőknek és a CDN-eknek, hogyan gyorsítótárazzák az egyes fájlokat, a Cache-Control fejléc segítségével. Például a Cache-Control: max-age=3600 azt jelenti: „ezt a másolatot egy óráig újra felhasználhatod.”
A modern build-eszközök a statikus fájlok legnehezebb részét gyorsítótár-törléssel (cache busting) oldják meg: minden változáskor a fájl új nevet kap egy ujjlenyomattal, például app.3f9a2c.js. A böngészők hosszú ideig gyorsítótárazhatják a régi nevet, mert az új verziónak egyszerűen más neve van.
Példa: egy termékkatalógus
Van egy kis webáruházad. A főoldalon 50 termék látszik árakkal és készletszintekkel az adatbázisból, valamint egy „trendi” lista, amelyhez minden megrendelés lassú számítása kell.
- A képeket és a szkripteket a böngésző és a CDN hosszú ideig gyorsítótárazza. Minden új build a megváltozott fájloknak új nevet ad, így a frissítések mégis megjelennek.
- A trendi listát 10 percenként számolják ki, és alkalmazás-gyorsítótárban tárolják. Minden látogató ezen 10 percen belül azonnal megkapja a mentett eredményt.
- Az árak rövid ideig vannak gyorsítótárazva, és a gyorsítótárat minden termékszerkesztéskor törlik, így a vásárlók nem látnak régi árat sokáig.
- A pénztárban a készlet soha nem kerül gyorsítótárba. Amikor valaki a „Vásárlás” gombra kattint, az app a valódi adatbázist ellenőrzi, így nem adhat el olyan terméket, amely éppen elfogyott.
- A kosár- és fiókoldalak soha nincsenek megosztott gyorsítótárban, mert személyesek.
Az eredmény: a főoldal gyors, az adatbázisnak sokkal kevesebb munkája van, és a pénzt vagy a magánszférát érintő dolgok soha nem elavultak.
Kulcsfogalmak
| Fogalom | Jelentés |
|---|---|
| Találat / mellétalálás | Az adat megvolt a gyorsítótárban / a forrásból kellett lekérni. |
| TTL (élettartam) | Meddig tekintik frissnek a mentett másolatot. |
| Elavult adat | Egy mentett másolat, amely már nem aktuális. |
| Érvénytelenítés | Egy mentett másolat szándékos eltávolítása, mert az eredeti megváltozott. |
| Gyorsítótár-törlés (cache busting) | A fájl nevének vagy URL-jének megváltoztatása, amikor a fájl változik, hogy a gyorsítótárak az új verziót töltsék le. |
| Cache-Control | Az a HTTP-fejléc, amely megmondja a böngészőknek és a CDN-eknek, hogyan gyorsítótárazzák a választ. |
| Kemény frissítés | Egy oldal újratöltése úgy, hogy a böngésző figyelmen kívül hagyja a gyorsítótárát. |
| Redis | Népszerű memóriabeli adattároló, gyakran alkalmazás-gyorsítótárként használják. |
Gyakori tévhitek
- „A gyorsítótárazás mindig jó.” Ha a rossz dolgot gyorsítótárazod, valódi hibák lesznek: régi árak, hiányzó új bejegyzések, vagy – a legrosszabb esetben – egy felhasználó privát oldala jelenik meg egy másiknak. Szándékosan gyorsítótárazz.
- „Ha a régi verziót látom, a frissítésem nem sikerült.” Általában nem így van. Próbálj meg kemény frissítést (Ctrl+Shift+R, Macen Cmd+Shift+R) vagy privát ablakot, mielőtt azt feltételeznéd, hogy valami elromlott.
- „A gyorsítótárazás megjavítja a lassú appot.” Ismétlődő kéréseknél elrejti a lassúságot. Az első kérés továbbra is lassú, és ha az alapprobléma egy hiányzó adatbázis-index, azt is javítani kell.
- „Mindent a lehető leghosszabb ideig kell gyorsítótárazni.” A hosszú gyorsítótár-idő azoknak a fájloknak való, amelyek változáskor új nevet kapnak. HTML-oldalaknál és adatnál a rövidebb idő biztonságosabb.
- „A gyorsítótár törlése mindenkinek megoldja.” Csak a te böngésződet üríti ki. A látogatóknak és a CDN-gyorsítótáraknak továbbra is megvan a saját másolatuk.
Mit kérdezz az AI-építőtől
- „Melyik része lassú az appnak, és melyik gyorsítótárazható biztonságosan?”
- „Gyorsítótárazd a [trendi listát / API-eredményt] [N] percig, és töröld, amikor a mögöttes adat megváltozik.”
- „Biztosítsd, hogy személyes vagy fiókadatot tartalmazó oldalt ne lehessen CDN-nel vagy megosztott gyorsítótárral tárolni.”
- „Állíts hosszú gyorsítótár-időt az ujjlenyomatos statikus fájloknak, és rövidet a HTML-nek.”
- „Gyorsítótárazd a [külső API] válaszait, hogy ne hívjuk minden oldalbetöltésnél – és mondd meg, mennyire lehet elavult ez az adat.”
- „Publikálás után régi verziót látok. Ez a böngészőm gyorsítótára, vagy valami nincs telepítve?”
Gyorsítótárazás a Mythexben
A Mythex-appod frissítésének közzététele után a dokumentáció szerint a CDN-gyorsítótárak rövid ideig késhetnek, és a nyilvános URL kemény frissítése megmutatja az új verziót – lásd Közzététel. A Hosztolási korlátok oldal is javasolja a statikus eszközök gyorsítótárazását, mert a hosztolás, az adatbázis-idő és a sávszélesség a kreditegyenlegedből fizetődik. Ezen túl – lekérdezési eredmények vagy API-válaszok gyorsítótárazása – azt az ügynökkel építteted be az appba.
Kapcsolódó olvasmányok: mi a CDN, hogyan tedd gyorsabbá a weboldalad és mi a sebességkorlátozás.
Kérdések
Mi a gyorsítótárazás egyszerűen fogalmazva?
A gyorsítótárazás azt jelenti, hogy elmentesz egy másolatot valamiről, amit lassú vagy drága volt megszerezni, így a következő alkalommal a mentett másolatból gyorsan ki lehet szolgálni. A böngészők, CDN-ek, szerverek és adatbázisok mind használnak gyorsítótárakat, hogy az appok gyorsabbak és olcsóbban futtathatók legyenek.
Miért látom még mindig a weboldalam régi verzióját a frissítés után?
Valószínűleg a böngésződ vagy egy CDN a régi fájlok gyorsítótárazott másolatát mutatja. Egy kemény frissítés (Windowson Ctrl+Shift+R, Macen Cmd+Shift+R) általában megoldja. A látogatóknak a jól felépített oldalak az frissített fájlokat új névvel látják el, így a gyorsítótárak automatikusan az új verziót töltik le.
Mit csinál a gyorsítótár törlése?
A böngésző gyorsítótárának törlése eltávolítja a böngésző által tárolt fájlok és oldalak mentett másolatait, így legközelebb mindent újra letölt. Megoldhatja azt, ha az oldalak törötten vagy elavultan néznek ki, de az első betöltés utána kicsit lassabb lesz.
Okozhat problémát a gyorsítótárazás?
Igen. A fő kockázat az elavult adat kiszolgálása – egy régi ár, egy elavult készletszint –, vagy ami rosszabb, egy felhasználó privát oldalának gyorsítótárazása, majd megmutatása valaki másnak. A jó gyorsítótár-szabályok döntik el, mi tárolható, mennyi ideig, és soha nem tárolnak személyes adatokat megosztott gyorsítótárban.