Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

Hastighet og hurtigbuffer i en nettbutikk

Modul 6: Drift og sikkerhet · Lesetid: 10 minutter

Læringsmål: Etter denne leksjonen kan du sette opp hurtigbuffer for en WooCommerce-butikk slik at butikken er rask og personlige sider aldri havner i hurtigbufferen, og du kan kontrollere det i HTTP-hodene.

Nøkkelbegreper: sidemellomlager, unntak (handlekurv, kasse, Min konto), informasjonskapsler som går forbi hurtigbufferen, no-cache-hoder, DONOTCACHEPAGE, objektbuffer, Redis, handlekurvfragmenter, geolokalisering med sidemellomlager, rydde i planlagte handlinger

To typer sider

Det grunnleggende om hurtigbuffer (sidemellomlager, nettleserbuffer, objektbuffer, OPcache, et CDN) står i WordPress-kurset, leksjon 6.2. Der står også den viktigste regelen for nettbutikker: personlige sider skal ikke i sidemellomlageret. Denne leksjonen går nærmere inn på det.

En nettbutikk har to typer sider:

TypeEksemplerHurtigbuffer
Lik for alleforside, butikkside, kategorier, produktsider, informasjonssiderSidemellomlager: ja, det er her du vinner mest
Ulik for hver besøkendehandlekurv, kasse, Min konto, angresiden med en innlogget kundeSidemellomlager: aldri

Går det galt, ser du det med en gang: en kunde ser handlekurven til en annen, eller verre, noens adresse på kassesiden. Det er også et personvernbrudd etter GDPR (KB 6749).

Hva WooCommerce allerede gjør selv

WooCommerce hjelper en hurtigbuffer på tre måter. Det er lurt å kjenne dem, så du ser når noe fjerner dem:

  1. Konstanter. På handlekurv, kasse og Min konto setter WooCommerce DONOTCACHEPAGE (og tilsvarende for objekt- og databasebuffer). Mange bufferutvidelser leser denne konstanten og hopper da over siden.
  2. HTTP-hoder. På de samme sidene sender WooCommerce med no-cache-hodene fra WordPress: Cache-Control: no-cache, must-revalidate, max-age=0, private og en Expires i fortiden. En proxy eller et CDN som følger reglene, lagrer da ikke siden. For innloggede brukere kommer no-store i tillegg.
  3. Informasjonskapsler. Så snart noen legger noe i handlekurven, setter WooCommerce informasjonskapsler som woocommerce_items_in_cart, woocommerce_cart_hash og wp_woocommerce_session_.... Gode hurtigbuffere gir ikke lenger besøkende med en slik informasjonskapsel en lagret side, heller ikke av produktsider, fordi for eksempel handlekurven i toppen da er ulik for hver besøkende.

Dokumentasjonen fra WooCommerce sier dette om bufferutvidelser: unnta handlekurv, Min konto og kasse, og informasjonskapslene woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed og store_notice[...]. For Varnish gir den også regler for adresser med ?add-to-cart=.

Hvor det går galt i praksis

  • Andre adresser for butikksidene. Du har gitt handlekurven et nytt navn, /mandje/, eller en oversettelsesutvidelse lager /de/warenkorb/. En hurtigbuffer som unntar faste adresser som /cart, overser dem. Bufferutvidelser som kjenner WooCommerce, henter sidene fra innstillingene; en hurtigbuffer på serveren eller i et CDN gjør ikke det.
  • Et CDN som bufrer alt. Noen CDN-regler ("cache everything") ignorerer HTTP-hodene. Unnta da butikksidene og informasjonskapslene ovenfor uttrykkelig.
  • En utvidelse som overskriver HTTP-hodene. En sikkerhets- eller hastighetsutvidelse setter av og til Cache-Control: public, max-age=... på hver side. Da er no-cache-hodene borte.
  • En økt for hver besøkende. Normalt setter WooCommerce en øktinformasjonskapsel først når noe ligger i handlekurven. Starter en utvidelse eller et tema en økt for hver besøkende (en informasjonskapsel wp_woocommerce_session_ eller PHPSESSID ved første besøk), forsvinner sidemellomlageret for alle, og butikken din blir treg når det er travelt.
  • Geolokalisering. Under WooCommerce > Innstillinger > Generelt velger du standardplasseringen til en kunde. Med vanlig "Geolokalisering" beregner serveren landet for hver besøkende, og ved priser per land passer det ikke med et sidemellomlager. WooCommerce har derfor valget "Geolokalisering (med støtte for sidemellomlagring)", som finner landet via en ekstra forespørsel i nettleseren. Trenger du ikke priser eller mva. per land før kassen, velger du butikkens land: det er enklest. For geolokalisering laster WooCommerce jevnlig ned en database fra MaxMind.

På en LiteSpeed-server (som hos WebOké) ordner utvidelsen LiteSpeed Cache selv unntakene for WooCommerce; kontroller dem i innstillingene for unntak. Hos andre webservere og leverandører fungerer det på lignende måte med en annen bufferutvidelse.

Hva sidemellomlageret ikke løser

Handlekurv og kasse bygges alltid av PHP og databasen. Når det er travelt (et tilbud, et nyhetsbrev), er det nettopp på disse sidene kundene bruker penger. Der hjelper andre ting:

  • En objektbuffer som Redis lagrer resultatet av databasespørringer i minnet. I en nettbutikk, med mange sider som ikke kan ligge i sidemellomlageret, gir det merkbart mer enn på et vanlig nettsted. Hostingen din må tilby Redis (hos WebOké går det, DA 15.7); deretter slår du det på med en utvidelse.
  • Handlekurvfragmenter. Klassiske temaer oppdaterer handlekurven i toppen med et skript (wc-cart-fragments) som gjør en ekstra forespørsel når handlekurven ikke er tom. Moderne blokktemaer med miniblokk for handlekurv trenger det mindre. Ikke last slike skript på sider der de ikke gjør noe.
  • Ryddige planlagte handlinger. WooCommerce bruker Action Scheduler til bakgrunnsoppgaver (leksjon 7.3). Fullførte handlinger ryddes som standard bort etter en måned. Vokser listen likevel til hundretusener, ofte på grunn av en utvidelse som stadig planlegger noe eller på grunn av mislykkede handlinger, blir databasespørringene tregere. Se under WooCommerce > Status > Planlagte handlinger hvor mange handlinger som er mislykket og venter.
  • HPOS. Bestillinger i egne tabeller (leksjon 1.2) gjør søk i bestillinger raskere enn i den gamle innleggstabellen. Eksisterende butikker må bytte selv (leksjon 6.2 om sikkerhetskopi først).
  • En oppdatert PHP-versjon og nok minne (leksjon 7.2).

I praksis: slik ser det ut i WooCommerce

Kontroller det hos Theehuis Example i et privat vindu med utviklerverktøyene i nettleseren (F12, fanen Nettverk, første forespørsel):

  1. Forsiden, last inn to ganger: andre gang et hode som x-litespeed-cache: hit eller cf-cache-status: HIT. Ingen informasjonskapsel wp_woocommerce_session_ ved første besøk.
  2. shop.example.com/winkelwagen/, last inn to ganger: ingen hit, og cache-control med no-cache eller private.
  3. Det samme for kasse og Min konto.
  4. Legg et produkt i handlekurven og last inn en produktside: du ser din egen handlekurv, ikke en lagret versjon.

Sammendrag

  • Sider som er like for alle, i hurtigbufferen; handlekurv, kasse og Min konto aldri.
  • WooCommerce setter selv DONOTCACHEPAGE, no-cache-hoder og informasjonskapsler; kontroller at ingenting fjerner eller ignorerer dem.
  • Pass på nye adresser for butikksidene, CDN-regler, utvidelser som overskriver HTTP-hoder, økter for hver besøkende og geolokalisering.
  • Redis, ryddige planlagte handlinger, HPOS og en god PHP-versjon hjelper der sidemellomlageret ikke kan.
  • Test ved å laste inn to ganger i et privat vindu og les HTTP-hodene.

Quiz

1. En kunde ser produkter i handlekurven som han ikke har valgt. Hva er den mest sannsynlige årsaken?



2. Hvilket HTTP-hode forventer du på kassesiden i en WooCommerce-butikk?



3. Butikken din viser ikke priser per land, men standardplasseringen står på "Geolokalisering". Hva er en enkel forbedring for hurtigbufferen?



4. Hvorfor hjelper Redis mer i en nettbutikk enn på et vanlig informasjonsnettsted?



Oppgave

Oppgave A6.4: Holdes handlekurv og kasse utenfor hurtigbufferen? Fyll inn adressen til butikken din og adressene til handlekurven og kassesiden (og eventuelt Min konto). Programmet henter forsiden to ganger med 2 sekunders mellomrom, uten informasjonskapsler, og deretter hver butikkside også to ganger. Ingenting legges i handlekurven, og ingenting bestilles. Grønt hvis forsiden andre gang kommer fra hurtigbufferen (eller er tydelig raskere) uten å sette en øktinformasjonskapsel, og hvis hver butikkside andre gang ikke har et treff i hurtigbufferen og sender en Cache-Control med no-cache, no-store, private eller max-age=0. Oransje hvis forsiden ikke bruker hurtigbuffer, eller hvis en butikkside ikke har treff, men heller ikke noe no-cache-hode. Rødt ved et treff i hurtigbufferen på handlekurv, kasse eller Min konto, eller hvis forsiden starter en WooCommerce-økt for hver besøkende.

En grønn hake betyr at denne kontrollen stemmer nå, ikke at butikken din er sikker.

Oppgave A6.4: Holdes handlekurv og kasse utenfor hurtigbufferen?





Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Les mer

Trinn i et kontrollpanel gjelder for WebOké; hos andre leverandører fungerer det på lignende måte.

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…