Kako da otkrijete prezahtevni WordPress plugin

јун 4, 2019
Aleksandar Gazibara

Da li ste se ikada zapitali kako WordPress plugin može da preoptereti CPU i kako biste mogli da ga pronadjete i da rešite problem?

Pre svega treba da pomenemo PHP konkurentnost kao i CPU, resurs koji nije neograničen. Potom ćemo da navedemo realne primere loših pluginova koji su zbog toga preterano zahtevni prema resursima servera.

Šta je PHP konkurentnost?

PHP konkurentnost se odnosi na maksimalni broj paralelnih PHP workera koji mogu da se izvrše u određenom vremenskom intervalu.

Što se tiče WordPress skalabilnosti, to je jedan od najvažnijih faktora koji je blisko povezan sa snagom CPU-a, temi kojoj često nije posvećeno dovoljno pažnje.

To je zapravo jedan od razloga zbog kojih nemamo previše poverenja u WordPress benčmark testove koji su veoma rasprostranjeni.

Shared hosting provajderi obično ograničavaju PHP konkurentost jer žele da hosting bude stabilan i ta informacija nije uvek dostupna korisnicima. Kada imate VPS/Cloud server, ne postoji ovakvo ograničenje, osim u resursima koje ste zakupili.

Kako PHP konkurentnost radi ispod haube?

PHP workeri u svakom trenutku izvršavaju po jedan zahtev. Kada za neki zahtev ne postoji PHP worker, on neće biti izvršen (greška 503) ili će biti odložen. Mnogi shared hosting provajderi u svojoj ponudi imaju planove sa PHP konkuretnošću koja podrazumeva obradu 2 istovremena dinamička zahteva, a neophodno je bar 4. Evo zbog čega.

Recimo, kada pokrenete backup taj zahtev će potrajati. Zamislite da se paralelno pokrene i WordPress cron, kome takođe treba dosta vremena. U tom trenutku backup i cron će se izvršavati istovremeno iskoristivši maksimalni kapacitet vaše PHP konkurentnosti.

Svaki naredni PHP zahtev će ili biti odložen ili otkazan uz 503 grešku. Zamislite da očekujete informaciju o statusu vašeg backup-a, a te informacije nema.

Vaš utisak bi mogao da bude da backup plugin ne radi. A pravi razlog je to što PHP zahtev za proveru statusa backup-a ne može da bude izvršen jer PHP konkurentnost dozvoljava samo 2 istovremena zahteva.

Što je veća snaga procesora, manje vremena je potrebno za izvršavanje PHP zahteva. Kada procesor nije dovoljno jak, na scenu stupa keširanje. Keširanje može da pomogne da spase server od nepotrebnog izvršavanja koda ili češće uštede nad upitima baze.

Kako da otkrijete koji plugin vam “ubija” CPU?

Postoje dve vrste plugin-ova koji preopterećuju CPU. Prvi šalju preveliki broj zahteva koji ne mogu da se keširaju, a drugi pokreću PHP procese koji predugo traju trošeći mnogo CPU snage.

U svakom slučaju trebalo bi da proverite da li koristite takve plugin-ove i da razmislite o alternativama. Evo šta možete da uradite.

Analizirajte sve HTTP zahteve iz browsera

Da biste analizirali sve HTTP zahteve, otvorite Chrome Developer Tools (CTRL+SHIFT+I) a zatim tab Network i pregledajte sve zahteve koji nisu poslati prema statičnim fajlovima (na primer slikama).

Evo primera za log file:

v1.2 ‘127.0.0.1’ ‘443’ ‘[12/Jul/2018:09:40:13 +0000]’ ‘/home/5b2d0fe3f911c8149cd0e889/public_html/wp-cron.php’ ‘POST /wp-admin/admin-ajax.php HTTP/1.1’ ‘200’ ‘278’ ‘-‘ ‘Clostebot/1.0’ ‘no-cache’ ‘-‘ ‘US’

Obratite pažnju na četiri parametra, IP address (127.0.0.1), DateTime (12/Jul/2018:09:40:13 +0000), request method & URL (POST /wp-admin/admin-ajax.php) kao i cache status (no-cache) da biste pronašli potencijalne probleme:

  • Da li je većina zahteva koji ne mogu da se keširaju u vezi sa istim ili sličnim URL-om i različitim query string-om?
  • Da li su ovi zahtevi stigli sa jedne ili više IP adresa?
  • Čemu služi takav zahtev?
  • Da li mogu da koristim neki drugi način i šta će se desiti ako isključim plugin?
Šta je najveća greška koja utiče na performans WordPress-a

Kada na svakoj strani imate po jedan PHP zahtev koji ne može da se kešira to je već dovoljno veliki problem, a kada imate četiri takva zahteva na svakoj strani, to je zaista velika greška koja može ozbiljno da ugrozi performans WordPress-a.

Na primer, WordPress tema SornaCommerce Pro pravi dinamičke PHP zahteve čak i za učitavanje CSS-a, Javascript-a, kao i da bi proverio da li je korpa prazna. Evo još nekih primera pluginova koji šalju više zahteva i ne keširaju se.

WordPress GDPR

WordPress GDRP plugin, verzija 1.6.4 je jedan od pluginova koji imaju po dva zahteva koji se ne keširaju na svakoj strani.

Kingdom – WooCommerce Amazon Affiliates Theme

Još jedna komercijalna tema za WordPress, koja šalje tri zahteva po strani.

WP GDPR

WP GDPR je GDPR cookie plugin šalje zahtev koji se ne kešira kako bi proverio da li treba da se prikaže GDPR cookie obaveštenje.

WooBought

Ovaj plugin šalje zahtev koji se ne kešira svakih 5 sekundi. Ako 10 posetilaca ne zatvori vaš sajt, imaćete 7200 nekeširanih zahteva za jedan sat: 3600 / 5 * 10 = 7200.

Zaključak

Ima mnogo drugih primera za pluginove koji preopterećuju CPU, kao i metoda za njihovo pronalaženje. Ipak, primeri koje smo pomenuli su najčešći.

Dobro optimizovan WordPress sajt sa milion posetilaca može da bude manje zahtevan od na primer loše optimizovanog WooCommerce sajta koji nema bukvalno nijednog posetioca.

Da, to je zaista moguće. Sajt sa milion posetilaca može da ima keširanu stranu na koju ih usmerava Facebook, dok na sajtu bez posetilaca crawleri posećuju stranice za dodavanje proizvoda koje ne mogu da se keširaju i time značajno opterećuju CPU.

Šta smo saznali:

  • Iako ste kupili dovoljno veliki shared hosting plan, vrlo je moguće da vaš sajt ne uspeva da opsluži sve posetioce.
  • To što za neki plugin morate da platite, ne znači da je taj plugin u pogledu zahtevnosti bolji od nekog sličnog besplatnog.
  • Nikad ne treba potpuno da obrišete keš ili da ostavite Development Mode uključenim na sajtu koji ima veliki broj poseta. Zamislite šta bi se desilo da Google obriše svoj keš za pretrage. Danima ili nedeljama bi bio offline.
  • Skaliranje sajta sa zahtevima koji se ne keširaju je kompleksno i najčešće zahteva nova i drugačija rešenja.
  • U većini slučajeva potrebno je optimizovano keširanje a broj posetilaca je samo relativan podatak.
  • WooCommerce sajtu je potrebno više resursa u startu, u odnosu na neke jako posećene portale sa vestima, jer mnogo strana ne mogu da se keširaju kao što su korpa i strane za plaćanje, korisnički profil, itd.

Kakva su vaša iskustva? Napišite nam u komentarima, kao i predloge ako želite da pišemo još o ovakvim temama.

1 komentar. Ostavi novi

Fenomenalno! Puno hvala na ovom više no korisnom tekstu!

Одговори

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *

mCloud mailing lista
Da li želiš da se prijaviš na mCloud mailing listu i svake nedelje dobijaš informacije o našim tekstovima na blogu i novostima iz mCloud-a?
Nemoj više prikazivati