Skip to main content Spring til indhold

Caching i WooCommerce: hvad der kan caches, og hvad der ikke kan

Cache er en stor del af det, der gør WordPress-sider hurtige, men en webshop er ikke et almindeligt WordPress-site. Forsiden og produktsiderne kan caches, kurv og checkout kan ikke, og en cache, der er sat forkert op, kan vise én kundes kurv til en anden eller gamle priser til alle.

Her gennemgår vi de forskellige slags cache, hvad hver af dem kan i en WooCommerce-shop, hvad der aldrig må caches, og hvordan du tjekker, at det virker.

Fire slags cache

“Cache” dækker over flere lag, der gemmer forskellige ting. De hjælper på hver sin del af shoppen:

LagGemmerHjælper på
SidecacheHele den færdige side som HTMLForside, kategorier, produktsider og blog for besøgende uden noget i kurven
Object cacheResultater af databaseforespørgsler, fx i RedisAlle sider, også kurv, checkout og admin
Browsercache og CDNBilleder, CSS og JavaScriptIndlæsningen i browseren, især for gentagne besøg
OPcachePHP-koden i færdigoversat formAlle sider, der bygges af PHP

Hvordan lagene hænger sammen med resten af WordPress, forklarer vi i sådan fungerer WordPress: arkitektur og performance.

Det, der kan caches

Sider, der er ens for alle besøgende, kan ligge i sidecachen: forsiden, kategorier, produktsider, blogindlæg og informationssider. For en ny besøgende uden noget i kurven og uden at være logget ind, er det typisk en stor del af sidevisningerne, og her gør sidecachen den største forskel. Serveren sender en færdig side i stedet for at bygge den med PHP og databasen.

Viser shoppen noget, der er forskelligt fra kunde til kunde på de sider, fx en minikurv i headeren, priser efter land eller “senest sete produkter”, skal det hentes separat efter siden er vist, ellers kan siden ikke caches for alle. WooCommerce gør det selv for minikurven med cart fragments. Hvornår det gør shoppen langsom, står i guiden om langsom “Læg i kurv” og cart fragments.

Det, der aldrig må caches

Kurv, checkout og “Min konto” er forskellige for hver kunde og må aldrig ligge i en sidecache. WooCommerce’ egen vejledning om cacheplugins (på engelsk) nævner netop de tre sider og de cookies, WooCommerce bruger til at holde styr på kurven:

  • woocommerce_items_in_cart og woocommerce_cart_hash, der viser, at kunden har noget i kurven, og hvornår den ændrer sig.
  • wp_woocommerce_session_, der er kundens session.

Mange cacheplugins og hostingudbydere springer cachen over, når de cookies er sat. Det betyder, at så snart en kunde har lagt noget i kurven, bliver alle de sider, kunden ser, bygget fra bunden. Det samme gælder kunder, der er logget ind. Derfor er det de dynamiske sider, der afgør, hvor hurtig shoppen føles for dem, der er tættest på at købe. Hvad der gør netop checkout langsom, står i vores guide til langsom checkout i WooCommerce.

Når cachen viser forkerte sider

En forkert opsat sidecache giver fejl, der kan være svære at genkende, fordi de kun rammer nogle kunder:

  • En anden kundes kurv eller navn: Kurv, checkout eller “Min konto” er havnet i cachen.
  • Gamle priser eller forkert lagerstatus: Cachen bliver ikke ryddet, når et produkt ændres, eller når et udsalg starter og slutter.
  • Formularer, der fejler: WordPress bruger sikkerhedsnøgler, såkaldte nonces (på engelsk), der som standard udløber efter 12 til 24 timer. Ligger en side i cachen længere end nøglens levetid, kan formularer og knapper på den holde op med at virke.
  • Checkout, der bliver ved med at loade: En cachet udgave af checkout eller dens scripts.

Tjek, at de tre sider og cookies er undtaget, at cachen ryddes, når produkter og priser ændres, og at sider ikke ligger i cachen længere end 12 timer, hvis de indeholder formularer.

Object cache: det, der hjælper på de dynamiske sider

Siderne, der ikke kan ligge i sidecachen, skal bygges af PHP og databasen hver gang. Her er et object cache det lag, der hjælper mest. Det gemmer resultaterne af databaseforespørgsler i hukommelsen, fx i Redis, så den næste sidevisning ikke skal spørge databasen om det samme igen. Det virker på alle sider, også kurv, checkout og admin. Hvordan du sætter Redis op, gennemgår vi trin for trin i guiden om Redis object cache.

Uden et vedvarende object cache glemmer WordPress resultaterne, når siden er bygget. Med det husker den dem på tværs af sidevisninger. Vi har sammenlignet flere object cache-plugins til WooCommerce i vores test af object cache-plugins (på engelsk). Hvor cachen passer ind i fejlfindingen af en langsom shop, står i afsnittet om cache i fejlfindingsguiden.

Browsercache og CDN

Billeder, CSS, JavaScript og skrifttyper ændrer sig sjældent og kan gemmes i kundens browser i lang tid. Sørg for, at serveren sender lange cachetider på de filer, og at filnavnene skifter, når filerne ændres, så kunderne ikke sidder med gamle udgaver. Mange temaer og plugins gør det sidste selv.

Et CDN leverer de samme filer fra servere tæt på kunden. Sælger du mest i Danmark, og ligger serveren i Europa, er gevinsten ved et CDN mindre, end når kunderne er spredt over flere kontinenter. Et CDN gør ikke kurv og checkout hurtigere, fordi de stadig skal bygges på din server.

OPcache

OPcache gemmer PHP-koden i færdigoversat form, så den ikke skal læses og oversættes ved hver sidevisning. Det er slået til hos mange hostingudbydere og kræver sjældent noget af dig, men det er værd at spørge, hvis du har din egen server. Mere om PHP-siden af hastighed står i PHP-optimering i WordPress.

Sådan tjekker du, at det virker

  1. Åbn en produktside i et privat browservindue, og se i udviklerværktøjerne (F12) under Network på svarets headers. Mange cacher sætter en header, der siger HIT eller MISS. Navnet afhænger af cachen.
  2. Genindlæs siden. Den anden visning skal være et HIT.
  3. Læg en vare i kurven, og åbn produktsiden igen. Nu skal den ikke komme fra cachen.
  4. Gå kurv og checkout igennem i to forskellige browsere med hver sin kurv, og tjek, at de aldrig ser hinandens indhold.
  5. Ret prisen på et produkt, og tjek, at den nye pris vises med det samme for en besøgende, der ikke er logget ind.

Ofte stillede spørgsmål

Hvilket cacheplugin skal jeg bruge?

Det afhænger af din hosting. Mange hostingudbydere har sidecache på serveren, og så skal du ikke lægge et cacheplugin oven på. To sidecacher over hinanden giver flere fejl, ikke mere fart. Spørg din udbyder, hvad de har, før du installerer noget.

Kan jeg cache sider for kunder, der er logget ind?

Som udgangspunkt ikke. Sider for loggede ind kunder kan indeholde navn, priser og kurv, der kun gælder dem. Her er det object cache og en hurtig server, der gør forskellen.

Vil du have hjælp?

Cache i en webshop skal sættes op, så den gør de rigtige sider hurtige og lader resten være. Vil du have, at vi gennemgår opsætningen i din shop, så læs om optimering af din WooCommerce-shop. Vi kigger gratis på din shop først og siger, hvad der skal til.

← Alle indlæg

Lad os høre mere om dig

Er din webshop langsom, ustabil eller bare svær at arbejde med? Skriv et par linjer, så får du en ærlig vurdering direkte fra udvikleren.