Ulkoisten HTTP-pyyntöjen vastauksien välimuistittaminen

Seravo Pluginiin sisäänrakennetun ominaisuuden avulla sivuston ulkoisiin resursseihin tekemien HTTP-pyyntöjen saamat vastaukset on mahdollista välimuistittaa. Esimerkiksi useat maksulliset lisäosat tarkistavat lisenssin lisäosan tekijän omalta palvelimelta. Mikäli palvelin vastaa hitaasti tai ei ollenkaan, tämä saattaa heijastua sivustolle asti hitautena tai toimimattomuutena. Tämän voi välttää välimuistittamalla ulkoisten pyyntöjen saamat vastaukset. Ominaisuus hyödyntää WordPressin Transients-rajapintaa. Halutessasi voit tutustua ominaisuuden koodiin tästä linkistä.

Alkutoimet

Selvitä aluksi, millaisia pyyntöjä sivusto tekee ulospäin ja mitä niistä haluat välimuistittaa. Apuna pyyntöjen kartoitukseen voi käyttää esim. Log HTTP Requests -lisäosaa. Tässä artikkelissa käytetään esimerkkinä WordPressin ytimen tekemää pyyntöä kohteeseen api.wordpress.org.

Klikkaamalla pyynnön linkki auki nähdään, että käytetty HTTP-metodi on "GET". Tämä pyynnön metodi täytyy huomioida seuraavassa vaiheessa.

Ominaisuuden aktivointi

Välimuistitustoiminto saadaan käyttöön määrittelemällä suodin eli filtteri esim. lapsiteeman functions.php-tiedostossa.

add_filter('seravo_cache_http_get_api_wordpress_org', '__return_true', 10, 1);

Filtterin nimeen tulee muokata haluttu osoite, tässä tapauksessa api.wordpress.org on muunnettu muotoon api_wordpress_org. Huom. myös käytetty HTTP-metodi on osa filtterin nimeä, tässä tapauksessa "GET". Filtterillä on mahdollista välimuistittaa GET- sekä POST-pyyntöjen vastauksia.

Testipyynnön tekeminen

Ensin tyhjennetään kaikki välimuistit seuraavalla komennolla:

$ wp-purge-cache

Tehdään seuraavaksi pyyntö Log HTTP Requests -lisäosasta saatuun kohteeseen api.wordpress.org/events/1.0/ käyttäen WordPressin omaa wp_remote_get-funktiota:

$ wp eval "wp_remote_get('https://api.wordpress.org/events/1.0/');"

Toimivuuden tarkistaminen

Filtterin toimivuus voidaan tarkistaa testipyynnön tekemisen jälkeen. Seravon palvelussa on oletuksena objektivälimuisti käytössä kaikilla sivustoilla, jolloin mm. tässä käytettävä WordPressin transient-välimuistitieto tallentuu Redis-objektivälimuistiin tietokannan sijaan. Tietojen noutaminen objektivälimuistista on nopeampaa kuin niiden hakeminen tietokannasta.

Filtterin luomat välimuistiavaimet ovat "http_cache"-alkuisia, jolla voimme kysyä avaimia Redikseltä:

$ redis-cli keys "*http_cache*"
1) "1:transient:http_cache_1e6b03e24f8a53cafdbd7418664184c2"

Mikäli sivusto ei syystä tai toisesta käytä objektivälimuistia, avaimia voidaan kysyä tietokannasta seuraavalla komennolla:

$ wp transient list --fields=name,expiration --search="*http_cache*" --human-readable
+---------------------------------------------+------------+
| name                                        | expiration |
+---------------------------------------------+------------+
| http_cache_1e6b03e24f8a53cafdbd7418664184c2 | 59 mins    |
+---------------------------------------------+------------+
Vastasiko tämä kysymykseesi? Kiitos palautteesta. Palautteen lähettämisessä oli ongelma. Yritä uudelleen myöhemmin.