Modul 6 · 6.2
Cachování
Modul 6: Rychlost · Doba čtení: 9 minut
Cíl lekce: Po této lekci dokážete vysvětlit, jaké druhy cache existují, a dokážete správně nastavit a zkontrolovat mezipaměť stránky.
Klíčové pojmy: mezipaměť stránky, mezipaměť prohlížeče, Cache-Control, objektová mezipaměť, Redis, OPcache, CDN, cacheovací plugin, LiteSpeed Cache, výjimky (přihlášení, košík, pokladna), vyprázdnění mezipaměti, duplicitní cacheovací pluginy
Cache: nedělejte stejnou práci dvakrát
Mezipaměť (cache) uchovává výsledek práce, aby se při příští příležitosti nemusela dělat znovu. U webu na WordPressu existují čtyři místa, kde se to děje, od největšího po nejmenší:
| Druh | Co se ukládá | Kde | Efekt |
|---|---|---|---|
| Mezipaměť stránky | Kompletní HTML stránky | Na serveru (nebo u CDN) | Největší přínos: PHP, pluginy a databáze se úplně přeskočí |
| Mezipaměť prohlížeče | Styly, skripty, obrázky, fonty | V prohlížeči návštěvníka | Druhá stránka se načte rychleji, protože soubory už tam jsou |
| Objektová mezipaměť | Výsledky databázových dotazů | V paměti serveru (Redis, Memcached) | Pomáhá tam, kde mezipaměť stránky nemůže, například u přihlášených uživatelů a e-shopů |
| OPcache | Přeložený PHP kód | V paměti PHP | PHP nemusí při každém požadavku znovu číst soubory; u většiny hostingů je ve výchozím stavu zapnutý |
Mezipaměť stránky
Lekce 1.2 to ukázala: bez mezipaměti WordPress při každé návštěvě vytváří celou stránku znovu. S mezipamětí stránky ji vytvoří první návštěvník a další dostanou uloženou HTML. TTFB jedné sekundy se tak může zkrátit na pár setin sekundy a Váš tarif zvládne zároveň mnohem více návštěvníků.
Jak mezipaměť stránky získáte, závisí na Vašem webovém serveru:
- LiteSpeed (mnoho sdílených hostingů, včetně WebOké): webový server má vlastní mezipaměť. Bezplatný plugin LiteSpeed Cache ji řídí z WordPressu: které stránky smí být v mezipaměti, kdy se mají vyprázdnit. Protože mezipaměť je přímo ve webovém serveru, pro uloženou stránku se PHP vůbec nespouští.
- Apache nebo nginx: cacheovací plugin, který ukládá HTML jako soubory, například WP Super Cache, W3 Total Cache nebo placený plugin jako WP Rocket. Nebo mezipaměť, kterou na úrovni serveru řeší hoster.
- Spravovaný hosting pro WordPress má často vlastní mezipaměť; tam většinou žádný cacheovací plugin neinstalujete.
Vyberte si jeden. Dva cacheovací pluginy najednou (například LiteSpeed Cache a WP Rocket) si navzájem překážejí: dvojí práce, stránky, které se nevyprázdní, podivné chyby. Na serveru LiteSpeed spolupracuje LiteSpeed Cache s mezipamětí webového serveru; jiný cacheovací plugin to neumí.
Co nesmí být v mezipaměti
Mezipaměť stránky dává každému stejné HTML. To selže u stránek, které jsou pro každého návštěvníka jiné:
- přihlášení uživatelé (panel nástrojů, „Vítejte, Lisa“);
- košík, pokladna a Můj účet u e-shopu;
- stránky s formulářem s jednorázovým kódem (nonce), který po čase vyprší;
- stránky, které zobrazují něco jiného podle lokace, jazyka nebo cookie.
Dobré cacheovací pluginy automaticky vynechávají přihlášené uživatele a známé stránky WooCommerce. U jiných pluginů (sekce pro členy, rezervační systém) musíte výjimky nastavit sami. Signál, že něco je špatně: návštěvník vidí košík někoho jiného, nebo formulář hlásí „vypršelo“ či „neplatný požadavek“.
Vyprázdnění: kdy je mezipaměť zastaralá?
Upravíte li stránku, musí uložená verze zmizet. Cacheovací pluginy při uložení příspěvku obvykle vyprázdní danou stránku, domovskou stránku a archivy. Při změně menu, šablony nebo widgetu je často potřeba vyprázdnit celou mezipaměť. Pokud po změně vidíte starou verzi, vyprázdněte mezipaměť (v panelu nástrojů cacheovacího pluginu) a zkontrolujte to v anonymním okně, aby se do toho nepletla Vaše vlastní mezipaměť prohlížeče.
Mezipaměť prohlížeče
Server sděluje prohlížeči pomocí hlaviček, jak dlouho smí soubor uchovávat:
cache-control: public, max-age=31536000Toto znamená: uchovávejte to rok. U stylů, skriptů, fontů a obrázků je dlouhá doba v pořádku, protože WordPress při nové verzi připojí za adresu jiné ?ver= a prohlížeč to pak považuje za nový soubor. U samotné HTML je obvyklá krátká doba (nebo žádná), aby návštěvníci rychle viděli změny.
Mnoho hostingů a cacheovacích pluginů toto řeší automaticky. V úkolu této lekce si to ověříte.
Objektová mezipaměť a Redis
Mezipaměť stránky nepomáhá u přihlášených uživatelů ani u košíku. Tam pomáhá objektová mezipaměť: WordPress uchovává výsledek databázových dotazů v paměti, v programu jako Redis nebo Memcached. Při příštím stejném dotazu WordPress získá odpověď z paměti místo z databáze.
To je užitečné zejména pro e-shopy, členské weby a weby s mnoha přihlášenými redaktory. Pro běžný informační web s mezipamětí stránky je rozdíl malý. Objektová mezipaměť vyžaduje, aby Váš hosting nabízel Redis nebo Memcached; následně ji zapnete pomocí pluginu (umí to LiteSpeed Cache, existují i samostatné pluginy).
CDN
CDN (content delivery network) je síť serverů na mnoha místech ve světě, které uchovávají kopie Vašich souborů (a někdy celých stránek). Návštěvník je dostane z nejbližšího serveru. To pomáhá hlavně u vzdálenějších návštěvníků a při velkém provozu. Pro evropský web s evropskými návštěvníky na evropském serveru je přínos malý. CDN s proxy (jako Cloudflare) mění i Vaše DNS a certifikát (lekce 7.5 z kurzu DNS); nedělejte to bez pochopení toho, co to znamená.
V praxi: jak to vypadá v panelu
Jako příklad použijeme LiteSpeed Cache na serveru LiteSpeed. Jiné cacheovací pluginy mají podobná nastavení pod jinými názvy.
- Nainstalujte a aktivujte LiteSpeed Cache v Pluginy > Nový plugin.
- Otevřete LiteSpeed Cache > Cache: „Povolit mezipaměť“ je zapnuté, „Mezipaměť pro přihlášené uživatele“ vypnuté (pokud nevíte přesně, co děláte).
- U e-shopu: zkontrolujte v sekci Vynechat, že jsou v ní košík, pokladna a Můj účet (u WooCommerce se to děje automaticky).
- Ostatní části (optimalizace CSS a JavaScriptu, obrázky) nechte zprvu vypnuté. Zapínejte je jednu po druhé a po každém kroku otestujte: právě tyto části někdy rozbijí šablonu.
- Zkontrolujte v anonymním okně pomocí vývojářských nástrojů (F12, Síť, první požadavek): při druhém načtení by tam měla být hlavička
x-litespeed-cache: hit.
Shrnutí
- Existují čtyři druhy mezipaměti: stránky (největší přínos), prohlížeče, objektová a OPcache.
- Na serveru LiteSpeed řídí LiteSpeed Cache mezipaměť webového serveru; na Apache nebo nginx použijete jiný cacheovací plugin. Vyberte si jeden.
- Přihlášení uživatelé, košík, pokladna a osobní stránky nepatří do mezipaměti stránky.
- Po změnách v menu nebo šabloně mezipaměť vyprázdněte a zkontrolujte v anonymním okně.
- Objektová mezipaměť (Redis) pomáhá u e-shopů a přihlášených uživatelů; CDN hlavně u vzdálených návštěvníků a velkého provozu.
Kvíz
Úkol
Úkol A6.2: Funguje Vaše cache stránek? Zadejte adresu svého webu. Program si dvakrát krátce po sobě vyžádá domovskou stránku bez cookies a při druhém požadavku se podívá na hlavičky, které naznačují zásah mezipaměti (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, hodnotu age vyšší než 0, nebo hlavičku jiné známé mezipaměti). Poté si vyžádá jeden styl z domovské stránky a zkontroluje, zda ho prohlížeč smí uchovávat alespoň sedm dní (cache-control: max-age nebo expires). Poznamenejte si, jakou mezipaměť používáte.
Další čtení
Tyto články popisují kroky v panelech WebOké; v jiných panelech fungují podobně.
- Příručka k DirectAdmin 18.3: Moje webová stránka je pomalá
- Příručka k DirectAdmin 15.7: Redis
- Můj web je pomalý nebo využívá příliš mnoho CPU: jak ho zrychlit
- OPcache: zpoždění 30 sekund při změně souboru PHP
- Je v DirectAdminu a LiteSpeed nebo Apache aktivován gzip
- Cache ve WordPressu (developer.wordpress.org, anglicky): https://developer.wordpress.org/advanced-administration/performance/cache/
