Moduuli 6 · 6.4
Nopeus ja välimuisti verkkokaupassa
Moduuli 6: Ylläpito ja tietoturva · Lukuaika: 10 minuuttia
Oppimistavoite: Tämän oppitunnin jälkeen osaat määrittää WooCommerce-kaupan välimuistin niin, että kauppa on nopea eivätkä henkilökohtaiset sivut koskaan päädy välimuistiin. Osaat myös tarkistaa sen HTTP-otsakkeista.
Keskeiset käsitteet: sivuvälimuisti, poissulut (ostoskori, kassa, Oma tili), välimuistin ohittavat evästeet, no-cache-otsakkeet, DONOTCACHEPAGE, objektivälimuisti, Redis, ostoskorifragmentit, sijainnin paikannus ja sivuvälimuisti, ajastettujen toimintojen siivous
Kahdenlaisia sivuja
Välimuistin perusteet (sivuvälimuisti, selaimen välimuisti, objektivälimuisti, OPcache, CDN) käydään läpi WordPress-kurssin oppitunnilla 6.2. Siellä on jo verkkokauppojen tärkein sääntö: henkilökohtaiset sivut eivät saa päätyä sivuvälimuistiin. Tämä oppitunti käy sen läpi tarkemmin.
Verkkokaupassa on kahdenlaisia sivuja:
| Tyyppi | Esimerkkejä | Välimuisti |
|---|---|---|
| Samat kaikille | etusivu, kauppasivu, kategoriat, tuotesivut, tietosivut | Sivuvälimuisti: kyllä, tästä saa suurimman hyödyn |
| Erilaiset jokaiselle kävijälle | ostoskori, kassa, Oma tili, peruuttamissivu kirjautuneelle asiakkaalle | Sivuvälimuisti: ei koskaan |
Jos jokin menee pieleen, sen huomaa heti: asiakas näkee toisen ostoskorin tai, mikä vielä pahempaa, jonkun toisen osoitteen kassasivulla. Se on myös GDPR:n tarkoittama henkilötietojen tietoturvaloukkaus (KB 6749).
Mitä WooCommerce tekee jo itse
WooCommerce auttaa välimuistia kolmella tavalla. Ne kannattaa tuntea, jotta huomaat, jos jokin poistaa ne:
- Vakiot. Ostoskori-, kassa- ja Oma tili -sivuilla WooCommerce asettaa vakion
DONOTCACHEPAGE(ja vastaavat myös objekti- ja tietokantavälimuistille). Moni välimuistilisäosa lukee tämän vakion ja jättää sivun silloin väliin. - Otsakkeet. Samoilla sivuilla WooCommerce lähettää WordPressin no-cache-otsakkeet:
Cache-Control: no-cache, must-revalidate, max-age=0, privateja menneisyyteen osoittavanExpires-otsakkeen. Sääntöjä noudattava välityspalvelin tai CDN ei silloin tallenna sivua. Kirjautuneille käyttäjille lisätään vieläno-store. - Evästeet. Kun joku lisää jotain ostoskoriin, WooCommerce asettaa evästeitä, kuten
woocommerce_items_in_cart,woocommerce_cart_hashjawp_woocommerce_session_.... Hyvä välimuisti ei enää tarjoa tallennettua sivua kävijälle, jolla on tällainen eväste, ei edes tuotesivuja, koska esimerkiksi yläpalkin ostoskori on silloin jokaisella kävijällä erilainen.
WooCommercen dokumentaatio neuvoo välimuistilisäosille: sulje pois ostoskori, Oma tili ja kassa sekä evästeet woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed ja store_notice[...]. Varnishille se antaa lisäksi säännöt osoitteille, joissa on ?add-to-cart=.
Missä käytännössä menee pieleen
- Kauppasivuilla on muut osoitteet. Olet nimennyt ostoskorin uudelleen osoitteeseen
/mandje/, tai käännöslisäosa luo osoitteen/de/warenkorb/. Välimuisti, joka sulkee pois kiinteitä osoitteita, kuten/cart, ei huomaa niitä. WooCommercen tuntevat välimuistilisäosat lukevat sivut asetuksista; palvelimen tai CDN:n välimuisti ei tee niin. - CDN, joka tallentaa kaiken. Jotkin CDN-säännöt ("cache everything") ohittavat otsakkeet. Sulje silloin kauppasivut ja edellä mainitut evästeet erikseen pois.
- Lisäosa, joka korvaa otsakkeet. Tietoturva- tai nopeuslisäosa asettaa joskus jokaiselle sivulle otsakkeen
Cache-Control: public, max-age=.... Silloin no-cache-otsakkeita ei enää ole. - Istunto jokaiselle kävijälle. Normaalisti WooCommerce asettaa istuntoevästeen vasta, kun ostoskorissa on jotain. Jos lisäosa tai teema luo istunnon jokaiselle kävijälle jo heti (eväste
wp_woocommerce_session_taiPHPSESSIDensimmäisellä käynnillä), sivuvälimuisti lakkaa toimimasta kaikilta ja kauppa on ruuhkassa hidas. - Sijainnin paikannus. Kohdassa WooCommerce > Asetukset > Yleinen valitset asiakkaan oletussijainnin. Pelkällä "Paikanna sijainti" -valinnalla palvelin laskee maan jokaiselle kävijälle erikseen, ja maakohtaisten hintojen kanssa se ei sovi sivuvälimuistiin. Siksi WooCommercessa on vaihtoehto "Paikanna sijainti (sivuvälimuistin tuella)", joka selvittää maan selaimessa ylimääräisellä pyynnöllä. Jos et tarvitse maakohtaisia hintoja tai arvonlisäveroa ennen kassaa, valitse kaupan maa: se on yksinkertaisinta. Sijainnin paikannusta varten WooCommerce lataa säännöllisesti MaxMindin tietokannan.
LiteSpeed-palvelimella (kuten WebOkéssa) LiteSpeed Cache -lisäosa hoitaa WooCommercen poissulut itse; tarkista ne poissulkuasetuksista. Muilla verkkopalvelimilla ja palveluntarjoajilla toinen välimuistilisäosa toimii samaan tapaan.
Mitä sivuvälimuisti ei ratkaise
PHP ja tietokanta rakentavat ostoskorin ja kassan aina uudelleen. Ruuhkassa (kampanja, uutiskirje) juuri ne ovat sivuja, joilla asiakkaasi käyttävät rahaa. Niihin auttavat muut keinot:
- Objektivälimuisti, kuten Redis, tallentaa tietokantakyselyjen tulokset muistiin. Verkkokaupassa, jossa on paljon sivuja, joita ei voi tallentaa sivuvälimuistiin, siitä on selvästi enemmän hyötyä kuin tavallisella sivustolla. Webhotellisi pitää tarjota Redis (WebOkéssa se onnistuu, DA 15.7); sen jälkeen otat sen käyttöön lisäosalla.
- Ostoskorifragmentit. Perinteiset teemat päivittävät yläpalkin ostoskorin skriptillä (
wc-cart-fragments), joka tekee ylimääräisen pyynnön, kun ostoskorissa on tuotteita. Moderneissa lohkoteemoissa, joissa on minikorilohko, sitä tarvitaan vähemmän. Älä lataa tällaisia skriptejä sivuilla, joilla niistä ei ole hyötyä. - Siivotut ajastetut toiminnot. WooCommerce käyttää taustatehtäviin Action Scheduleria (oppitunti 7.3). Valmiit toiminnot siivotaan oletuksena kuukauden kuluttua. Jos lista kasvaa silti satoihin tuhansiin, usein jonkin laajennuksen jatkuvasti ajastamien tai epäonnistuneiden toimintojen takia, tietokantakyselyt hidastuvat. Tarkista kohdasta WooCommerce > Tila > Ajastetut toiminnot epäonnistuneiden ja odottavien toimintojen määrä.
- HPOS. Kun tilaukset ovat omissa tauluissaan (oppitunti 1.2), tilausten haku on nopeampaa kuin vanhassa artikkelitaulussa. Olemassa olevien kauppojen pitää siirtyä itse (oppitunti 6.2 varmuuskopioista ennen siirtoa).
- Ajantasainen PHP-versio ja riittävästi muistia (oppitunti 7.2).
Käytännössä: näin se näkyy WooCommercessa
Tarkista asia Theehuis Examplen kaupassa yksityisessä ikkunassa selaimen kehitystyökaluilla (F12, välilehti Verkko, ensimmäinen pyyntö):
- Lataa etusivu kahdesti: toisella kerralla näkyy otsake, kuten
x-litespeed-cache: hittaicf-cache-status: HIT. Evästettäwp_woocommerce_session_ei ole ensimmäisellä käynnillä. - Lataa
shop.example.com/winkelwagen/kahdesti: osumaa ei ole, jacache-controlsisältää arvonno-cachetaiprivate. - Tee sama kassalle ja Oma tili -sivulle.
- Lisää tuote ostoskoriin ja lataa tuotesivu: näet oman ostoskorisi, et tallennettua versiota.
Yhteenveto
- Kaikille samat sivut välimuistiin; ostoskori, kassa ja Oma tili ei koskaan.
- WooCommerce asettaa itse DONOTCACHEPAGE-vakion, no-cache-otsakkeet ja evästeet; tarkista, ettei mikään poista tai ohita niitä.
- Huomioi uudelleen nimetyt osoitteet, CDN-säännöt, otsakkeet korvaavat lisäosat, jokaiselle kävijälle luotavat istunnot ja sijainnin paikannus.
- Redis, siivotut ajastetut toiminnot, HPOS ja hyvä PHP-versio auttavat siellä, missä sivuvälimuisti ei voi.
- Testaa lataamalla sivu kahdesti yksityisessä ikkunassa ja lue otsakkeet.
Tietovisa (quiz)
Tehtävä
Tehtävä A6.4: Pysyvätkö ostoskori ja kassa välimuistin ulkopuolella? Anna kauppasi osoite sekä ostoskori- ja kassasivun osoitteet (ja halutessasi Oma tili -sivun). Ohjelma hakee etusivun kahdesti 2 sekunnin välein ilman evästeitä ja sen jälkeen jokaisen kauppasivun myös kahdesti. Ostoskoriin ei lisätä mitään eikä mitään tilata. Vihreä, jos etusivu tulee toisella kerralla välimuistista (tai on selvästi nopeampi) asettamatta istuntoevästettä ja jos jokaisella kauppasivulla ei ole toisella kerralla välimuistiosumaa ja sivu lähettää Cache-Control-otsakkeen, jossa on no-cache, no-store, private tai max-age=0. Oranssi, jos etusivu ei käytä välimuistia tai jos kauppasivulla ei ole osumaa mutta ei myöskään no-cache-otsaketta. Punainen, jos ostoskorissa, kassalla tai Oma tili -sivulla on välimuistiosuma tai jos etusivu aloittaa WooCommerce-istunnon jokaiselle kävijälle.
Vihreä merkki tarkoittaa, että tämä tarkistus on nyt kunnossa, ei sitä, että kauppasi olisi turvallinen.
Lue lisää
Hallintapaneelin vaiheet koskevat WebOkéta; muilla palveluntarjoajilla ne toimivat samaan tapaan.
- Ilmainen WordPress-kurssi 6.2: Välimuisti
- Ilmainen WordPress-kurssi 6.3: Kuvat, PHP ja muita nopeusvoittoja
- DirectAdmin-ohje 15.7: Redis
- Verkkosivustosi on hidas tai kuluttaa liikaa CPU:ta: näin saat sen nopeammaksi
- Onko tämä tietovuoto, ja pitääkö minun ilmoittaa siitä?
- Configuring caching plugins (developer.woocommerce.com, englanniksi): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
