Cache a rezervačné systémy: zrýchlenie webu bez rozbitých rezervácií
Cache je jeden z najúčinnejších spôsobov, ako zrýchliť web na WordPresse. Často je to rozdiel medzi webom, ktorý sa na mobile načítava niekoľko sekúnd, a webom, ktorý je tam takmer hneď. Pri webe s rezerváciami, objednávkami alebo formulármi má však jednu záludnosť. Ak sa nastaví zle, web je rýchly, ale rezervácie prestanú fungovať. A často to zistíte, až keď sa sťažuje zákazník.
Prečo cache zrýchli web
Keď návštevník otvorí stránku na WordPresse, server ju zakaždým skladá odznova. Pýta sa databázy, spúšťa doplnky, skladá šablónu. To všetko trvá. Cache urobí jednoduchú vec: hotovú stránku si uloží a ďalším návštevníkom ju pošle bez skladania. Je to ako rozdiel medzi varením jedla na objednávku a podávaním toho, čo je už hotové.
Pomáha to najmä pri meraní, kedy sa zobrazí to najdôležitejšie na stránke, odborne LCP. Server odpovie rýchlejšie, a tak sa rýchlejšie začne zobrazovať aj všetko ostatné.
Prečo cache môže rozbiť formuláre a kalendáre
Problém je v tom, že niektoré stránky nesmú byť pre všetkých rovnaké. Formuláre na WordPresse obsahujú skryté bezpečnostné kódy. Chránia ich pred zneužitím a pri WordPresse platia spravidla najviac jeden deň. Potom vypršia.
Ak cache uloží stránku s formulárom, uloží s ňou aj tento kód. Ďalší návštevníci dostanú stránku so starým kódom. Kým je platný, všetko funguje. Keď vyprší, formulár odmietne odoslanie, aj keď zákazník všetko vyplnil správne. Pre zákazníka to vyzerá, že rezervácia nefunguje. Pre vás, že prestali chodiť rezervácie.
Pri kalendároch dostupnosti je problém podobný. Uložená stránka môže ukazovať voľný termín, ktorý medzitým niekto obsadil, alebo naopak.
Ktoré stránky vylúčiť z cache
Riešením nie je cache vypnúť. Stačí z nej vylúčiť stránky, ktoré musia byť pre každého aktuálne:
- stránky s rezervačným formulárom alebo kalendárom,
- kontaktné a iné formuláre,
- pri e-shope košík, pokladňu a účet zákazníka,
- všetko, čo ukazuje údaje konkrétneho prihláseného človeka.
Ostatné stránky, ako úvod, služby, cenník či články, môžu byť v cache pokojne. Práve tie navštevuje najviac ľudí, takže zrýchlenie ostane tam, kde je najviac vidieť.
Dvojitá cache: WordPress aj hosting
Častá pasca je, že cache je na webe dvakrát. Raz ju robí doplnok vo WordPresse a druhýkrát hosting na serveri. Vy v doplnku nastavíte výnimku pre stránku s rezerváciami, ale hosting ju naďalej ukladá po svojom. Výsledok: stránka je stále z cache a problém trvá.
Preto si pri nastavovaní zistite, či cache nerobí aj hosting, a výnimky nastavte na oboch miestach. Alebo jednu z nich vypnite a nechajte len tú, ktorú máte pod kontrolou.
Pri tom môže pomôcť aj preload cache, teda vopred pripravené uložené stránky. Prvý návštevník tak nečaká, kým sa stránka uloží. Pri stránkach s formulármi však platí to isté ako vyššie: tie do preloadu nepatria.
Plánované úlohy cez hosting
WordPress má mechanizmus plánovaných úloh. Stará sa napríklad o odosielanie pripomienok, čistenie starých rezervácií alebo zálohy. Lenže štandardne ho spúšťa návšteva webu. Ktosi otvorí stránku a WordPress pri tom skontroluje, či nemá niečo urobiť.
Keď web servíruje stránky z cache, WordPress sa pri návšteve vôbec nespustí. Plánované úlohy sa potom nespúšťajú včas alebo vôbec. Pripomienky neodídu, termíny sa neuvoľnia.
Riešením je spúšťať plánované úlohy pravidelne cez hosting, nezávisle od návštev. Väčšina hostingov to umožňuje. Úlohy potom bežia spoľahlivo každých pár minút, bez ohľadu na to, či na web práve niekto prišiel.
Ako overiť, že to funguje
- Otvorte stránku s rezerváciami v anonymnom okne prehliadača a urobte skúšobnú rezerváciu.
- Zopakujte to o deň neskôr. Práve vtedy by sa prejavil vypršaný bezpečnostný kód.
- Skontrolujte, či chodia potvrdzujúce a pripomínacie e-maily.
- Rýchlosť si overte testom webu na mobile.
Presne takto som to nastavil aj na webe s online rezerváciami z prípadovej štúdie. Viac o tom, čo web spomaľuje, nájdete v článku Prečo je môj web pomalý. A ak chcete zrýchlenie nechať na mňa, pozrite si zrýchlenie a opravy webu.
Zdroje: WordPress: Nonces, WordPress: Napojenie na plánovač servera, web.dev: Largest Contentful Paint.