Sebesség Szakszó

Cache (gyorsítótár)

Szerző: · 8 perc olvasás · Frissítve:
Cache (gyorsítótár) - Sebesség (szakszó) a tudástárban
Cache (gyorsítótár) - Sebesség | eClick GEO-audit tudástár

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.

Miért fontos

Sebesség és felhasználó

A cache nélküli oldalon minden látogató kivárja a teljes generálást. PHP-fut, adatbázis-lekérdezés, sablon-renderelés. Oldal-cache-sel ugyanez egy kész HTML kiszolgálása, tipikusan 100-300 ms helyett 20-50 ms.

Ez nem kozmetika. A TTFB (Time to First Byte) a betöltés első építőköve, és minden későbbi metrika rajta ül. Ha a TTFB 800 ms, az LCP szinte biztosan elbukik.

Feltérképezési költség

A keresők véges feltérképezési kapacitást szánnak egy domainre. Lassú szerver mellett kevesebb oldalt járnak be ugyanannyi idő alatt. Nagy webshopnál ez több ezer termékoldal indexelését késlelteti.

Üzleti hatás

  • Kampányforgalomnál a lassú szerver ott hasal el, ahol a legdrágább: csúcsterhelésnél.
  • A cache nélküli oldalak tárhelyigénye és CPU-számlája többszörös.
  • Rosszul beállított cache viszont régi árat, régi készletet vagy más felhasználó adatait mutathatja. Ez a ritkább, de súlyosabb hiba.

Kikre vonatkozik

Minden oldalra vonatkozik, ahol a HTML-t szerver állítja elő, tehát gyakorlatilag minden CMS-re és webshopra.

Kiemelten érinti:

  • WordPress és WooCommerce oldalak, ahol sok plugin fut minden kérésnél
  • Nagy termékszámú webshopok
  • Blogok, hírportálok, tudástárak: itt a tartalom ritkán változik, a cache szinte ingyen nyereség
  • Saját VPS-en vagy dedikált szerveren futó egyedi fejlesztések

Kevésbé releváns:

  • Statikus generált oldalak (SSG), ahol eleve kész HTML áll a lemezen
  • SaaS-platformok, például Shopify, ahol a platform maga kezeli a réteget
  • Staging és fejlesztői környezetek, ahol a friss állapot fontosabb a sebességnél

Sosem szabad cache-elni: kosár, pénztár, fiók, admin és minden bejelentkezett állapot. Ezekre a Cache-Control: private, no-store való.

Hogyan ellenőrzöd

Böngészőből

  1. Nyisd meg a devtools Network fülét, és töltsd be az oldalt.
  2. Kattints a fő dokumentumra, nézd a Response Headers részt.
  3. Keresd a Cache-Control, ETag, Age és X-Cache fejléceket.
  4. Tölts újra, és nézd a Size oszlopot. A statikus fájloknál (disk cache) vagy (memory cache) a várt érték.

Parancssorból

  1. Futtass egy curl -sI https://pelda.hu/ parancsot.
  2. Futtasd le kétszer egymás után, és hasonlítsd össze a válaszidőt.
  3. A második futásnál a cache-elt oldal érezhetően gyorsabb, és az Age fejléc nullánál nagyobb.

Mérőeszközzel

A PageSpeed Insights és a Lighthouse külön tételként jelzi a rövid élettartamú statikus fájlokat. A „Serve static assets with an efficient cache policy” sor alatt felsorolja a fájlokat és a hozzájuk tartozó TTL-t.

Jó jel:

  • Statikus fájlokon max-age=31536000, immutable, verziózott fájlnévvel
  • HTML-en rövid max-age vagy s-maxage és stale-while-revalidate
  • 100 ms alatti ismételt TTFB
  • X-Cache: HIT vagy hasonló találat-jelzés a CDN-től

Rossz jel:

  • Cache-Control: no-cache, no-store a főoldal HTML-jén, indok nélkül
  • Teljesen hiányzó cache-fejlécek a képeken és a CSS-en
  • A kosároldal public cache-fejléccel
  • Minden újratöltésnél azonos, magas TTFB

Mit néz ebből a riport

Az audit a nyilvános válaszfejléceket és az ismételt kérések válaszidejét vizsgálja. Jelzi, ha a statikus tartalmak cache-politikája hiányzik vagy túl rövid, és ha a HTML-en érdemi gyorsítótárazás nyomát sem látni. A szerveren belüli beállításokba nem lát bele, csak a kívülről mérhető viselkedésbe.

Hogyan javítod

WordPress

  1. Tegyél fel egy oldal-cache megoldást. A tárhelyszolgáltató beépített megoldása általában jobb, mint egy további plugin.
  2. Kapcsold be az objektum-cache-t Redis vagy Memcached mögé, ha sok a lekérdezés.
  3. Ellenőrizd, hogy az OPcache aktív a PHP-ben.
  4. Zárd ki a cache-ből a kosár, pénztár, fiók és wp-admin útvonalakat. WooCommerce-nél ez kötelező.
  5. Állíts be automatikus ürítést tartalom- és árfrissítéskor.

Shopify

A platform saját CDN-je kezeli a statikus fájlokat, itt nem állítasz fejléceket. Amit tehetsz: a sablonban a asset_url szűrőket használd, mert ezek verziózott, hosszan cache-elhető URL-t adnak. A külső scripteket vedd ki a kritikus útvonalból.

Unas

A cache-réteg a platform oldalán fut, nem te állítod. A te dolgod a saját feltöltött tartalom: képméret, egyedi JS és CSS mennyisége. Külső scriptet csak indokolt esetben tegyél a fejlécbe.

Shoprenter

Ugyanez a helyzet: a kiszolgálási réteg adott. Nézd át a sablonba illesztett saját kódot, és a nagy képeket cseréld modern formátumra. Ezek hatnak arra, mennyit kell a böngészőnek újra letöltenie.

Egyedi fejlesztés

  1. Tedd a statikus fájlokat verziózott névre, például app.9f2c1.css, és adj rájuk max-age=31536000, immutable fejlécet.
  2. A HTML-re adj rövid s-maxage értéket és stale-while-revalidate direktívát, hogy a frissítés a háttérben történjen.
  3. Építs be reverse proxy cache-t, nginx fastcgi_cache vagy Varnish szinten.
  4. Készíts célzott ürítési végpontot, hogy szerkesztéskor csak az érintett URL-ek törlődjenek.
  5. Rakj elé CDN (tartalomszolgáltató hálózat) réteget, ha a látogatók földrajzilag szórtak.
  6. Ellenőrizd a Vary fejlécet, ha nyelv vagy eszköz szerint más választ adsz.

Gyakori hibák

  • Nincs semmilyen cache-fejléc a statikus fájlokon - a visszatérő látogató minden képet és scriptet újra letölt.
  • A kosár vagy a pénztár publikus cache-be kerül - más felhasználó adatai jelenhetnek meg, ez adatvédelmi incidens.
  • Hosszú max-age verziózatlan fájlnéven - a frissítés napokig nem ér el a látogatókhoz, és a hibajavítás beragad.
  • A cache soha nem ürül tartalomfrissítéskor - régi ár, elfogyott termék vagy törölt bejegyzés marad kint.
  • Minden kérésnél teljes ürítés - a cache így soha nem melegszik be, a hatása nulla.
  • Több egymásra pakolt cache-plugin - a rétegek ütköznek, és kiszámíthatatlan lesz, melyik verzió megy ki.
  • A cache-t a lassú kód takarására használják - az első, még nem cache-elt kérés és a robotok továbbra is a lassú oldallal találkoznak.

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.

Források

Kapcsolódó fogalmak

A te oldaladon hogy áll a(z) „Cache (gyorsítótár)”?

Futtass egy SEO-auditot: pontszám, fejlesztői ítélet, a leggyorsabb javítások, és minden tételhez bizonyíték.

Ingyenes SEO-audit indítása