Näppärä välimuisti: transient-optiot

Toisinaan WordPress-plugineita tai -teemoja kehitellessä tulee tarvetta välimuistille. Hyvä esimerkki löytyy Kirjavinkeistä, johon tein Katso myös -listan, joka listaa samankaltaisia arvosteluja avainsanojen ja omien taksonomioiden perusteella.

Lista kootaan parilla MySQL-kyselyllä ja muutamalla foreach-silmukalla, eikä sen rakentaminen ole hirveän raskas tehtävä — mutta on se silti aivan turhaa tehdä joka kerta, kun sivu ladataan. Muutoksia listaan tulee korkeintaan kerran-pari päivässä, kun uusi merkintä ilmestyy, eikä lainkaan haittaa, että muutokset eivät päivity aivan heti.

Olen aikaisemmin ratkaissut tätä tilannetta omilla välimuistivirityksillä, mutta se on turhaa, sillä WordPressissä on sisäänrakennettuna erittäin kätevä ratkaisu: Transients.

Transient on muuttuja, joka tallennetaan raukeamisajan kanssa. Ajan kuluttua tieto katoaa muistista. Voit siis tehdä näin:

$tulos = get_transient('avain');
if (!$tulos) {
    $tulos = [mutkikkaan koodin tuottama HTML-pläjäys];
    set_transient('avain', $tulos, 60 * 60 * 24);
}
return $tulos;

Tämä koodi tarkistaa ensin, löytyykö valmista dataa transientista nimeltä ’avain’. Jos ei löydy (get_transient() palauttaa false, jos mitään ei löydy), tuotetaan haluttu sisältö ja varastoidaan se set_transient()-funktiolla samalla avaimella. 60 * 60 * 24 on varastointiaika eli tässä tapauksessa vuorokausi (60 sekuntia * 60 minuuttia * 24 tuntia).

Multisite-sivustoilla tulee käyttää get_transient():n sijasta get_site_transient()-funktiota (ja sama set_transient():n kanssa), jotta saa oikean saitin transientin.

Kirjavinkeissä olen käyttänyt esimerkin yhteydessä viikon raukeamisaikaa, jolloin kunkin sivun katso myös -lista tarvitsee laskea korkeintaan kerran viikossa, muulloin oikea tieto löytyy yhdellä tietokantakyselyllä (ja parhaassa tapauksessa tieto on palvelimella suoraan muistissa, eikä sitä tarvitse edes hakea tietokannasta).

Jos pluginisi tai teemasi tuottaa jotain HTML-koodia, eikä tietoa ole pakko päivittää jokaikisellä latauksella, säästä serveriäsi ja tallenna tieto edes vähäksi aikaa transientiksi, etenkin jos et käytä mitään varsinaista välimuistipluginia.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

This site uses Akismet to reduce spam. Learn how your comment data is processed.