A cache (gyorsítótár) egy köztes tároló, amely egy már előállított választ megőriz, hogy a következő kérésnél ne kelljen újra előállítani. A weben ez egyszerre jelent böngésző-oldali tárolást, CDN-szintű tárolást és szerveroldali tárolást, és mindegyik réteg más problémát old meg.
Hogyan működik
A szerver a válasz mellé fejléceket küld arról, meddig és kinek szabad eltárolni a tartalmat. A legfontosabb a Cache-Control, ebben adod meg a max-age értéket másodpercben. A böngésző ezután a lemezéről veszi elő a fájlt, hálózati kérés nélkül.
Ha lejárt az érvényesség, a böngésző nem tölt le mindent újra. Egy ETag vagy Last-Modified alapú feltételes kéréssel rákérdez, változott-e a fájl. Ha nem, a szerver 304 Not Modified választ ad, test nélkül.
A három réteg
- Böngésző-cache: a visszatérő látogató gépén. Statikus fájlokra (CSS, JS, kép, betűtípus) hat, az első betöltésen nem segít.
- CDN- vagy proxy-cache: a tartalomszolgáltató hálózat él-szerverein. Minden látogatónak segít, és leveszi a terhet az origó szerverről.
- Szerveroldali cache: kész HTML, adatbázis-lekérdezés vagy objektum tárolása. Ez javítja a legjobban a szerver válaszidejét.
A magyar KKV-oldalak többségén csak az első réteg működik, az is véletlenül, a tárhely alapbeállításából. A dinamikus HTML minden kérésnél újra legenerálódik.
Miért számít a keresőknek és az AI-nak
A keresőrobot és a nyelvi modellek lekérője is időkorláttal dolgozik. Ha a szerver lassan válaszol, a feltérképezés ritkul, a lekérő pedig könnyen időtúllépéssel elenged egy oldalt. Egy jól melegített cache mellett a válaszidő tizedére esik.
A generatív keresők ráadásul gyakran valós időben húzzák le az oldalt a válasz előtt. Ott nincs második próbálkozás. A stabil elérhetőség és válaszidő itt közvetlenül dönti el, bekerülsz-e a válaszba.
Röviden: a cache nem sebességtrükk, hanem az a réteg, ami eldönti, hogy a látogató és a robot a kész választ kapja-e vagy a munkát is kivárja.
Technikai példa
Egy jól beállított statikus fájl és egy HTML válasz fejlécei:
# Statikus, verziózott fájl
HTTP/2 200
content-type: text/css
cache-control: public, max-age=31536000, immutable
etag: W/6a1f2c9
# HTML dokumentum
HTTP/2 200
content-type: text/html; charset=utf-8
cache-control: public, max-age=0, s-maxage=600, stale-while-revalidate=60
age: 142
x-cache: HIT
# Kosároldal
HTTP/2 200
cache-control: private, no-store, max-age=0
Az s-maxage csak a megosztott cache-re (CDN, proxy) vonatkozik, a böngészőre nem. A stale-while-revalidate engedi, hogy a régi verzió menjen ki, míg a friss a háttérben elkészül.
Ellenőrzés parancssorból, két futással:
curl -s -o /dev/null -w "TTFB: %{time_starttransfer}s\n" https://pelda.hu/
curl -sI https://pelda.hu/ | grep -iE "cache-control|age|etag|x-cache"
Az első parancs a válaszidőt méri, a második a cache-fejléceket írja ki. Ha az age értéke nőni kezd ismételt hívásoknál, a megosztott cache dolgozik.
Gyakori kérdések
Miért látom én a régi tartalmat, amikor a látogatók már az újat?
Szinte mindig a böngésződ saját cache-e okozza. Próbáld ki privát ablakban vagy Ctrl+Shift+R kombinációval. Ha ott is a régi jön, akkor a szerver- vagy CDN-cache nem ürült ki a szerkesztés után.
Kell CDN, ha már van oldal-cache a szerveren?
Nem feltétlen. Ha a látogatóid főleg Magyarországról jönnek és a szerver is itt van, az oldal-cache önmagában sokat ad. A
CDN (tartalomszolgáltató hálózat) akkor hoz érdemi pluszt, ha külföldi forgalmad is van, vagy ha a forgalmi csúcsokat kell leteríteni.
Lassítja-e a cache a Google indexelést?
Épp ellenkezőleg. A gyorsabb válaszidő több bejárt oldalt jelent ugyanannyi idő alatt. Egyetlen kockázat van: ha a cache napokig nem ürül, a robot is a régi tartalmat látja, ezért kell a tartalomfrissítéshez kötött ürítés.
Webshopnál mi az, amit soha nem szabad cache-elni?
A kosarat, a pénztárt, a fiókoldalt és minden bejelentkezett nézetet. Ezekre private, no-store fejléc való. A termékoldal cache-elhető, de a készlet és az ár frissítésekor ürülnie kell.
Elég-e egy cache-plugin, vagy kódot is optimalizálni kell?
A plugin a tüneteket kezeli. Az első, még nem cache-elt kérés továbbra is a lassú kódot futtatja, és ugyanezt kapja sok robot is. A riportokban rendszeresen látjuk, hogy a cache mögött 1,5 másodperces generálás rejtőzik.