Caching en WooCommerce butik uden at bryde kurven
Fuldsides caching og en levende indkøbskurv lyder som svorne fjender - indtil du omgår de rigtige cookies. Her er præcis, hvordan man får en WooCommerce-butik til at flyve, mens kassen fortsætter med at fungere perfekt.
En WooCommerce-butik er for det meste identisk for hver shopper - og den del kan cachelagres ved kanten for øjeblikkelig belastning. Kurven, kassen og kontosiderne er personlige, så du omgår cachen for dem ved at registrere WooCommerce's session cookies. Cache kataloget, omgå vognen, og du får en butik, der føles øjeblikkelig uden et enkelt plugin.
Spørg nogen, hvorfor de ikke har lagt deres WooCommerce-butik bag en cache, og du får normalt det samme svar: "Jeg kan ikke - min indkøbskurv er dynamisk." Det er en rimelig bekymring. Ingen ønsker en shopper til at tilføje tre elementer, ramte checkout, og se en tom vogn, fordi en forældet side fik serveret. Men den frygt holder mange butikker langsomme uden nogen god grund, fordi indsigelsen kan løses på omkring to minutter.
Tricket er ikke at cache mindre. Det er at cache 95% af din butik, der er ens for alle, og være præcis om 5%, der ikke er.
Hvorfor WooCommerce er langsom i første omgang
WooCommerce er WordPress med en seriøs e-handelsmotor boltet på, og den motor gør meget arbejde. For hver enkelt sidevisning vågner PHP, kører dit tema og en stak plugins, laver en bunke databaseforespørgsler, beregner, hvad der skal vises, og sender først derefter HTML. For en besøgende, der surfer på en stille eftermiddag, det er fint. For hundrede shoppere på én gang under en forfremmelse, at per-side arbejde bliver den ting, der tipper din server over.
Her er sagen: den produktside har ikke ndret i uger. Genopbygning fra bunden for hver besøgende er rent affald. Fuldsides caching gemmer den færdige HTML på kanten og serverer den kopi direkte, så PHP og databasen får en pause, og din shopper får en side i millisekunder.
Indsigten: det meste af din butik er den samme for alle
Gå gennem din butik som en udlogget besøgende. Hjemmesiden, kategorilisterne, hver produktside - de ser identiske ud, uanset hvem der ser dem. Det er det cachevenlige flertal. De eneste sider, der er forskellige pr. Person, er dem, der er knyttet til en session: indkøbskurven, kassen og kontoområdet.
Hvad skal cache, og hvad skal man omgå
| Side | Cache det? | Hvorfor? |
|---|---|---|
| Hjemmeside, kategorier, produkter | Ja. | Identisk for enhver shopper |
| Søgeresultater, blog, CMS-sider | Normalt | Samme indhold til alle |
| Kurv | Aldrig | Unikt til shopperens session |
| Til Kassen | Aldrig | Levende totaler, betaling, adresser |
| Min konto / ordrehistorik | Aldrig | Personligt og privat |
Hvordan Bypass faktisk virker
Så hvordan kan kanten vide, om en anmodning er "bare browsing" eller "har en vogn"? Cookies. I det øjeblik en shopper tilføjer noget til deres kurv eller logger ind, sætter WooCommerce specifikke cookies på deres browser. En cache, der forstår disse cookies, kan automatisk foretage det rigtige opkald på hver anmodning.
En ny besøgende kommer
Ingen WooCommerce session cookies endnu, så de får den hurtige, cachelagrede katalogside - serveret fra kanten i millisekunder.
De tilføjer noget til vognen
WooCommerce sætter en indkøbscookie. Fra nu af ser kanten, at cookie og omgår cachen for dem, der serverer levende sider.
De tjekker ud
Kurv, checkout og konto anmodninger springe cachen helt, så totaler, forsendelse og betaling er altid live og korrekt.
De cookies, der betyder noget, er de sædvanlige WooCommerce-mistænkte - ting som woocommerce_cart_hash, woocommerce_items_in_cart og den indloggede sessionscookie. Du behøver ikke at huske dem: forudindstillingen kender allerede listen.
Forudindstillingen med ét klik
Du kan konfigurere alt dette i hånden liste cookies, indstille bypass stier til /cart, /checkout og /my-account, teste hver kant tilfælde. Eller du kan vælge WooCommerce-acceleratoren forudindstillet, som sætter det hele op for dig. Det kender cookies, det kender stierne, og det efterlader dig med et katalog, der er fuldt cachelagret og en kasse, der er fuldt live.
Hvad du beholder
- Instant produkt og kategori sider
- En levende, altid korrekt vogn
- Indloggede kunder ser deres egne priser
Hvad du taber
- Per-besøg PHP og database belastning
- "Er min cache sikker?" angst
- Endnu et caching-plugin til babysit
Glem ikke produktbillederne
En sejr mere, mens du er her, fordi det er ofte den største. En butik lever og dør på sine produktbilleder, og disse billeder er normalt den tungeste ting på siden. Konvertering af dem til WebP eller AVIF og ændring af dem til den størrelse, der faktisk vises - i farten, på kanten - gør ofte mere for opfattet hastighed end nogen backend-ændring.
En note på Black Friday
Denne opsætning handler ikke kun om hverdagens hastighed - det er det, der lader en lille butik overleve sin største dag. Når trafikken går 10x, cachelagrede katalogsider tager næsten alt af denne belastning fra din oprindelse, så din server er fri til at håndtere de ting, der rent faktisk tjener penge: vogne og kasser. Tilføj et valgfrit venteværelse foran, og selv en efterspørgselsstigning ud over din kapacitet bliver en velordnet kø i stedet for et nedbrud.
"Min indkøbskurv er dynamisk" er ikke en grund til at springe cache - det er en grund til at cache præcist. Cache kataloget på kanten, omgå cachen for indkøbskurv, checkout og logget ind sessioner ved hjælp af WooCommerce egne cookies, og optimere disse produktbilleder. Du beholder hver eneste del af butikkens funktionalitet og mister trægheden, alt sammen uden at installere en ting.
Hvis du vil have den korte vej, anvender WooCommerce CDN-opsætningen denne forudindstilling for dig, og Site Accelerators dækker den samme idé til WordPress, PrestaShop og brugerdefinerede platforme.
Mads har arbejdet i IT - for det meste hosting - siden han var 16. Han tog tidligt ejerskab i en SaaS-virksomhed og var med til at udvide den til Visma, har opbygget og drevet datacenternetværk og fungeret som CTO for et dansk datacenter. Han startede NordicCDN for at gøre hurtig, sikker infrastruktur enkel at bruge.