WordPress CMS-t használók gyakori tapasztalata, hogy kisebb látogatószám esetén is irreális a rendszerre épített weboldaluk erőforrás-használata. WordPress gyorsítása témakörben nem elhanyagolható azon beállítások elvégzése, melyek a rendszerhez tartozó funkció-manipulációkat tartalmazzák. Az optimalizálás két hasznos lépése, ha a wp-cron.php futása, illetve az admin-ajax.php php kezelése is beállításra kerül.
WordPress optimalizálásakor az alábbiakat ajánlott elvégezni:
1. wp-cron.php
Mit csinál?
Automatikusan ellenőrzi, hogy vannak-e elérhető frissítések a használt rendszerhez, bővítményhez vagy sablonhoz. Ha engedélyezve vannak az automatikus frissítések, akkor azokat el is végzi. Az időzített bejegyzéseket a megadott időben publikálja. Email értesítőket küld ki. Elvégzi az automatikus backup-olást, ha ilyen bővítmény is telepítve van.
Hogyan működik?
A WordPress weboldal megnyitása esetén alapértelmezetten MINDIG lefut a wp-cron.php fájl is, ezzel ellenőrizve a fenti teendőit. Ha van teendő, akkor azt elvégzi, az ellenőrizendő feladatlistát MINDEN meghíváskor lefuttatja a fájl, így az mindig terheli a tárhelyet, azok erőforrásait fogyasztja optimalizálatlan működés esetén.
Nem mindenkinek kötelező, de...
Kis látogatottságú weboldal esetén nem égetően szükséges a wp-cron.php manipulálása. Azonban, amikor közepes vagy nagyobb látogatottságú a weboldal, mindenképp ajánlott ennek kezelése. A nagyobb látogatószámmal növekszik a megnyitások száma, többször scann-elik az oldalt jó- és rosszindulatú bot-ok is. Ezek a megnyitások mind 1-1 wp-cron.php lefuttatásnak is megfelelnek, mely könnyen felemésztheti a weboldal tárhelyén kvótázott (főként processzor) erőforrásokat.
Honnan ismerhetem fel, hogy ez okozza a problémát?
- cPanel felületen a Mutatók/Process Killer menüpont alatt a futó folyamatok leginkább csak index.php-t futtató folyamatok, míg a valós idejű erőforrás-statisztikában a Processzorhasználat van megemelkedve.
- cPanel felületen a Mutatók/ProcessKiller alatt a futó folyamatokban többször is szerepel a wp-cron.php fájl futása.
- Néhány látogató esetén is magas a Processzorhasználat értéke
A wp-cron.php problémájának megoldása
- ki kell kapcsolni a fájl automatikus futását
- ezt követően viszont időzíteni kell cron-feladatként (Cron feladatok beállítása IDE KATTINTVA megtekinthető) a fájl futását cPanel felületen
wp-cron.php probléma megoldása 1/2 lépés
A wp-cron.php futásást a Wordpress weboldalhoz tartozó wp-config.php fájlban lehet letiltani. A letiltáshoz az alábbi kódot kell elhelyezni a fájlban:
define('DISABLE_WP_CRON', true);
Nagyon fontos, hogy a fenti kódot az alábbi sor FÖLÉ kell elhelyezni:
/* That's all, stop editing! Happy publishing. */
VAGY az alábbi sor után:
define( 'DB_COLLATE', '' );
wp-cron.php probléma megoldása 2/2 lépés
A tiltás beállítása után a cPanel felületen szükséges beállítani, hogy milyen gyakran fusson le a wp-cron.php fájl. A cron-feladatok kezeléséhez az alábbiak szerint lehet eljutni:
- cPanel-be belépés
- Speciális/Cron-feladatok menüpont
A cron feladatot tetszőleges időszakra, de maximum pár óránkénti lefutásra állítsuk be! Az alábbi parancs egy helyesen időzíthető metódust mutat be:
wget -q -O - https://DOMAIN.TLD/wp-cron.php?doing_wp_cron >/dev/null 2>&1
FONTOS: a fenti példakódban a DOMAIN.TLD -t értelemszerűen módosítani kell arra a domain névre, amihez a beállítás szeretné megtenni!
Míg az alábbi kép egy Naponta, 12-óránként lefutó wp-cron.php meghívást mutat be:
A helyes beállítás után a wp-cron.php fájl NEM fog lefutni minden oldallekérés esetében, csakis a cron-feladatokban beállított időközönként.
2. admin-ajax.php
Mit csinál?
- Automatikus mentéseket menedzseli (pl: cikkek módosításai közben)
- a belépések lejárati-idejét (automatikus kiléptetés) figyeli és kezeli
- session-fájlokat kezel
- értesít egy másik felhasználóval közösen szerkesztett bejegyzés esetén
- valós idejű adatokat mutat az admin-felületen keresztül
- kommunikál a böngészőablakban a felhasználóval (mentés történik, kilép-e a felületről, stb)
Hogyan működik?
A böngésző és a szerver között hoz létre AJAX kapcsolatot 15 másodpercenként, melynek segítségével a fenti feladatokat tudja ellátni. Feladata még a közeljövőben a kéretlen szerkesztésektől való védelem is.
A Wordpress Hearthbeat API-jának működése részletesen ismertetésre kerül a fejlesztői oldalon is.
Röviden az API működése és a problémafaktora: egy bejelentkezéssel, pár perces admin-felületen való munkavégzéssel akár 25 lekérdezés is elindul, melyek több szerkesztő jelenléte esetén hatványozódik, így lassítva a weboldalt. Ha egy bejegyzés vagy oldal épp szerkesztésben van, akkor a Wordpress Hearthbeat API is működésben van, ami elkezdi „bombázni” kérésekkel a szervert, 15 másodpercenként. Ez a sokszoros adatfolyam okoz a tárhelyen magas processzorhasználatot. Ez egyértelműen a WordPress optimalizálás lépéseinek egyik hiányát jelenti.
Honnan ismerhetem fel, hogy ez okozza a problémát?
A legegyszerűbben úgy lehet tetten érni ezt a hibaforrást, ha egy népszerű metrikai oldalon (pingdom, gtmetrix, stb) ellenőrzést indítunk saját weboldalunkra. Az ellenőrzés végén lehet látni egy úgynevezett „Waterfall” táblázatot (gtmetrix.com eset látható a képen, de minden metrikai oldal mutat ilyen ábrát), melynek áttekintésekor konkrétan látszódik az admin-ajax.php lekérés is. Az alábbi képeken látható, hogyan jelenik meg az admin-ajax.php a különböző oldalak táblázatában.
- gtmetrix.com
- pingdom.com
- webpagetest.org
De észrevehető a problémát okozó admin-ajax.php futás a böngésző konzolablakának „Hálózat” lapfülén is.
- Google Chrome konzolfelület
- Mozilla Firefox konzolfelület
Értem, de mit tehetek?
A Wordpress Hearthbeat API-t kell deaktiválni, vagy az ellenőrzési időket kell hosszabbra definiálni. Az utóbbi szokott lenni a helyes metódus, hogy ne történjen funkcióvesztés.
Az admin-ajax.php problémájának megoldása
Az optimalizált működés, a processzor terhelésének csökkentése úgy érhető el, ha bővítmény segítségével megmondjuk ennek a Wordpress Hearthbeat API-nak, hogy „mit” és „milyen gyakran” ellenőrizzen.
admin-ajax.php probléma megoldása 1/2 lépés
Ehhez a HEARTHBEAT CONTROL bővítmény lehet a segítségünkre.
A bővítmény ITT érhető el: https://wordpress.org/plugins/heartbeat-control/#description
A Hearthbeat Control nevű bővítmény telepítése és aktiválása után az admin felületen navigáljunk a Beállítások/Hearthbeat Control Settings menüpontba.
admin-ajax.php probléma megoldása 2/2 lépés - beállítások
A Hearthbeat Control bővítmény az alábbi képen látható lehetőségeket biztosítja a beállításhoz.
Az elvégezhető beállítások:
- Allow: engedélyezés
- Disable: tiltás
- Modify: módosítás (ennek kiválasztása esetén egy 300 másodpercig skálázható csúszkát kapunk)
Emlékeztetőül: A Wordpress rendszere 15 másodpercenként küld kéréseket, így ennek megfelelően tilthatjuk vagy növelhetjük meg egy-egy folyamat kérdezési gyakoriságát.
Egy nagyon általános beállítás lehet az, amikor minden opciót 120-200 másodperces gyakoriságra módosítunk. Ezt mutatja be az alábbi kép is: