WordPress Plugin: function_cache


A tutorial.hu átállás kapcsán derült ki az, hogy a 2.3 -as wordpress-ben sincs egyetlen épkézláb cache funkció sem. Ami van (wp-cache), azt pedig a fügvényeken belül használják, és ráadásul még a wordpress saját belső függvényei sem mindenhol.

Nem egyszer azonban erősen szükség lett volna egy olyan fügvényre, ami a lap egyes dinamikusan generált HTML elemeit menti el későbbi felhasználás érdekében. Ilyen blokk például a tag cloud rész, a havi arhivum linkjei, illetve a latest forum comment / lap komment részek.

A függvények betöltődésének idejével ugyan ez a függvény nem spórol, viszont a függvényeknek nem kell lefutnia, ami számos esetben nagyságrendekkel gyorsítja meg a lap betöltődését.

A függvény egy template függvény, ami egyszerűvé teszi a használatát.

A futáshoz szükség van egy cache könyvtárra a wp gyökérkönyvtárában és feltétel az, hogy a webszerver ezt a könyvtárat tudja írni (chmod).

A plugin telepítése

A plugin telepítése során semmi extra izgalomra nem kell számítani, egyszerűen csak bemásolod a “wp-content/plugins” mappába, majd a wordpress adminisztrációs felületén aktiválod.

Használata

A meghívni kívánt lassú lefutású template függvény elé kell beilleszteni a függvény hivást a következő módon:

1
2
3
<?php
 function_cache('fugveny_neve', 'fuggvenyparameterei', cache_time);
?>

A cache time alap értelmezés szerint 60 másodperc, de egyes blokkok esetében ez sokkal, sokkal hosszabb is lehet és még mindig nem lesz zavaró. A tutorial.hu -n a havi arhivum blokk például 86400 Mp-es cache time-val fut.

Példa a használatára

A sidebar.php-t alapul véve pl. a menüben az arhív cikkek megjelenítéséért az alábbi kód felel hagyományos esetben

1
2
3
<ul>
	<?php wp_get_archives('type=monthly') ?>
</ul>

Ezt a sort az alábbi kell cserélni ahhoz, hogy működjön a feltelepített cache plugin.

1
2
3
<ul>
	<?php function_cache('wp_get_archives', 'type=monthly', 3600); ?>
</ul>

Mint látható, a függvény neve, ami a zárójelen kívül volt eredetileg, átkerült egy másik helyre, helyét a function_cache vette át. A függvény paramétere (type=monthly) szintén megmaradt, de utána kiegészült a kód azzal, hogy meg lehet még adni a cache idejét is (3600).

A lap a függvény teljes kimenetét elmenti, tehát HTML adatokat ment le, ezért nagyobb design váltás esetén ajánlott a cache könyvtár tartalmának törlése.

Teljesítmény mérési adatok

A tutorial.hu fő oldala ezzel a cache-el, 0.3 – 0.5 mp alatt betöltőtdik, mig cache nélkül ez az érték 1 másodperc fölött van. (Ha a wordpress belső cache sem dob találatot akkor pedig ez az érték a 2-3 másodpercre is megnőtt.)

A plugin letölthető: WordPress Function Cache plugin

Szerző: TLoF
blog: tlof.hu

A cikkhez kapcsolódó anyagként ajánlom figyelmedbe még a “WordPress for speed” c. cikket is.

Kapcsolódó bejegyzések:

A cikket beküldte: TLoF (http://tlof.hu)

17 hozzászólás

  1. Tupacko says:

    Köszönjük szépen! :)

  2. Barát Csaba says:

    Sokan nem fogják tudni, hogy melyik fájlba és hova illesszék be azt a kódot és hogy hova másolják a function_cache.php fájlt.

  3. Benjamin says:

    “mely alázza az eddigi megoldásokat. De nagyon csúnyán… :)”

    Pontosan melyik megoldasokat es milyen szamokkal van ez alatamasztva? Nem akarok kukacoskodni de kivancsi lennek!

    Digg Defender-t probaltatok, ahhoz kepest mennyivel jobb? Ez egy kicsit informativabb lenne:
    http://elliottback.com…….

    kosz!

  4. Harder says:

    Ki lehet egészíteni a cikket ha tényleg nem egyértelmű, hogy egy plugint a plugin könyvtárba kell bemásolni és aktiválni. Majd beleteszek pár mintakódot is fájl nevével együtt.

  5. BCS says:

    A plugin elhelyezését valóban könnyen kikövetkeztetik. De, hogy hova írják azt a kódot, arról szerintem az emberek >90%-nak fogalma sincs.

  6. Harder says:

    Nézd meg most a cikket, remélem elég részletes lett. :)

  7. BCS says:

    Igen, így már használható. Köszi a cikk kiegészítést.

  8. TillZ says:

    Kösz a plugint. Cache időnek 3600-at érdemes megadni?
    Mikor érdemes többet, vagy kevesebbet?

  9. Benjamin says:

    Hova tunt a kommentem?

  10. Harder says:

    TillZ,
    ezt neked kell tudnod, hogy 1-1 blokk a lapodon mennyi időnként kell, hogy frissüljön. Ha nem terhelt, akkor szvsz lehet kevesebb is ,rajtad múlik.

    Benjamin,
    a bejegyzésedet akismet megfogta, most láttam és engedélyeztem. A számokkal kapcsolatos kérdésedre inkább TLoF tud majd választ adni.

  11. kobak says:

    Kitettem a word-press.hu -ra a hírt.

  12. Harder says:

    Szia kobak, köszönöm!

  13. TLoF says:

    TillZ: A cache time -al kapcsolatban, nézd meg hogy milyen gyakran frissül az adott blokk, és mennyire zavaró hogyha nem a pontos a kijelzés.

    Pl. Az archivum hónap linkjei, egészen magas, akár 86400 -as értéknél sem okoznak gondot, hiszen igy naponta egyszer legalább újra generálódnak, és legkésőbb elsején éjfél előt egy pár perccel frissül, ha van már a havi bejegyzés, de ez nem zavaró, hiszen ha volt is bejegyzés az még a főlapon található.

    Az utolsó comment blokk például már sokkal gyakoribb frissitést igényel, itt mondjuk egy 60-90 mp az a jó érték, hiszen ekkor már a cache-nek lessz hit-je, tehát lessz olyan lapletöltés amit cache-ből tudsz kiszolgálni, ergo megérte felrakni, ugyanakkor ez az idő intevallum még nem zavaró abban az esetben, hogy már régen nem is az az állás.

    A Tag Cloud is elég nagy, és elég állandó ahhoz, hogy csak 4 óránkén frissüljön, igy rengeteg adatbázis müveletet meg lehet spórolni, hiszen 300 tag összszedése nem kispályás feladat a wp rendszerében (megjegyzés, de csak azért mert ezt a részt szarul csinálják.), igy viszont egy file_get_content-l megvan a blokk…

    Ez a függvény is csak akkor tudja, kifejteni hatását, hogyha van látogaód. ha napi 1000 oldal letöltésed van egyenletesen elosztva akkor csak a 4-8-24 órás cache-eknek lessz értelme, Ha napi 40-50e lapletölséd van mint a tutorial.hu -nak akkor már egy pár perces cache is nagyon sokat számithat.

    Benjamin: Irok ma neked össze hasonlitást a cache rendszerekről. Előljáróban annyit hogy az általad linkelt digg survive cucc úgy kezdi a tulélst, hogy a bejövő forgalmat átirányitja a egy CDN -re aminek a világ 260 helyén közel 3000 szervere van, igy pedig nem nehéz.

  14. connor says:

    Feature request: kézi cache elévülés.
    Akkor lenne hasznos ha én bizonyos események bekövetkezésekor direkt akarom, hogy elévüljön az adott terület. Így felnyomom a cache time-ot mindenhol és ott ahol szükséges elévülést magam szabályozom. (hozzászóláskor elég akkor frissíteni ha hozzászólás érkezett)

    Egyébként jónak tűnik fel is fogom tenni kipróbálás céljából.

  15. Bidu says:

    Köszi a leírást! TLoF, te egy főnyeremény vagy itt… :)

  16. TLoF says:

    connor: Iszonyat bonyolult kód lenne, gondolj bele, hogy hány eventet kellene figyelnie a programnak, és a vonatkozó cache-eket milyen sok paraméterrel kellene kezelni ahhoz, hogy ez megvalósulhasson. Erre a WP jelenlegi felépitése nem igazán alkalmas. Az egyetlen megoldás az lenne, ha előre definiált cache elemeket használna a rendszer akkor viszont a rugalmassága veszne el.

    Illetve ezt a módszert követve inkább a lvl 3-as cache -t kellene ilyenre kidolgozni, ha megoldásra kerül a blokkok külön frissithetőségének rendszere.

    Egyszerüen: Nem éri meg a strapát.

    Bidu: Köszi :)

  17. Bagi Zoltán says:

    Nagyon köszönöm én is! Próbálkoztam cache pluginnal, de valószínűleg a szerver beállítások miatt nem jutottam egyről kettőre, egészen eddig. :)

Szólj hozzá
a WordPress Plugin: function_cache c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>