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).
Tartalomjegyzék
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.
Köszönjük szépen! :)
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.
„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!
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.
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.
Nézd meg most a cikket, remélem elég részletes lett. :)
Igen, így már használható. Köszi a cikk kiegészítést.
Kösz a plugint. Cache időnek 3600-at érdemes megadni?
Mikor érdemes többet, vagy kevesebbet?
Hova tunt a kommentem?
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.
Kitettem a word-press.hu -ra a hírt.
Szia kobak, köszönöm!
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.
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.
Köszi a leírást! TLoF, te egy főnyeremény vagy itt… :)
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 :)
Új magyar WordPress plugin: function_cache…
Nagyobb látogatottságú WordPress blogok terhelését csökkentő új magyar fejlesztésű plugin TLoF-tól….
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. :)