Preskoči na sadržaj
Natrag na pisanje
|
web platforms performance infrastructure

Zašto WordPress stranice s vremenom uspore

Problem rijetko bude sam WordPress. Usporavaju ga slojevi pluginova, loš hosting, zapuštena baza i činjenica da nitko ne vodi infrastrukturu ispod.

Klijent je nazvao prošlog mjeseca. U panici. Njihova WordPress stranica učitavala se 8,2 sekunde. Google ju je označio. Organski promet pao je 34% u šest tjedana. Htjeli su znati što nije u redu s WordPressom.

S WordPressom nije bilo ništa krivo.

Revizija

Otvorio sam stranicu u Chrome DevToolsu. Početna stranica povlačila je 12MB resursa. Četrdeset sedam aktivnih pluginova. Tri odvojena skripta za analitiku. Dvije biblioteke za slidere — od kojih se jedna nije koristila ni na jednoj stranici. Plugin za kontakt formu koji učitava svoj CSS i JavaScript na svakoj stranici, uključujući stranice bez ikakvih formi.

Baza podataka imala je 814.000 redova samo u wp_postmeta tablici. Preko 23.000 revizija objava koje nitko nikad nije očistio. Transienti koji su istekli prije mjeseci, ali nikada nisu obrisani. Tablica wp_options automatski je učitavala 4,2MB na svaki zahtjev za stranicu.

Hosting je bio dijeljeni plan od 9 dolara mjesečno. Isti server pokretao je negdje između četrdeset i dvjesto drugih stranica. Bez CDN-a. Bez object cachinga. Bez page cachinga osim onoga što je caching plugin pokušavao napraviti — a to, kako se ispostavilo, nije bilo mnogo jer je bio u konfliktu s dva druga plugina.

Ta stranica bila je aktivna pet godina. Počela je brzo. Počela je čisto. Imala je dvanaest pluginova kad je pokrenuta. Developer ju je napravio, predao i nastavio dalje. Nitko nije održavao infrastrukturu ispod.

Kako se to dogodi

Nitko ne primijeti 0,2 sekunde u jednom koraku. To je suštinski problem.

Instalirate plugin za SEO. Dodaje 80ms. Instalirate alat za forme. Dodaje 120ms. Traka za dijeljenje na društvenim mrežama. Alat za pop-up prozore. Sigurnosni skener. Slider za slike. Plugin za backup koji pokreće upite u pozadini. WooCommerce instanca za tri proizvoda koje prodajete jednom u kvartalu.

Svaki je razuman sam za sebe. Svaki dodaje nekoliko upita prema bazi podataka, nekoliko HTTP zahtjeva, CSS datoteku, JavaScript datoteku. Brojevi su pojedinačno dovoljno mali da se ignoriraju.

Nakon tri godine imate 40 pluginova, 200 upita prema bazi po učitavanju stranice i server koji troši više vremena na pokretanje PHP-a nego na posluživanje sadržaja. Stranica se učitava šest sekundi. Pa sedam. Pa osam.

Degradacija je nevidljiva jer je postupna. Nijedan plugin nije ništa pokvario. Sustav je propadao.

Pet stvarnih uzroka

Akumulacija pluginova. Većina WordPress stranica koje revidiram ima između 30 i 50 aktivnih pluginova. Većini ih treba 10 do 15. Svaki plugin koji učitava JavaScript i CSS na prednjoj strani dodaje težinu. Svaki plugin koji postavlja upite bazi podataka dodaje latenciju. Matematika je jednostavna — 40 pluginova znači 40 stvari koje se događaju na svakoj stranici, a nisu trebale.

Dijeljeni hosting. Server od 9 dolara mjesečno dijeli resurse među desecima ili stotinama stranica. Kada susjedova stranica dobije promet, vaša postaje sporija. Nema izolacije. Nema garantiranih resursa. To je digitalni ekvivalent dijeljenja kuhinje s četrdeset stranaca i čuđenja zašto nikada nema prostora na pultu.

Napuhanost baze podataka. WordPress pohranjuje sve u bazu podataka. Revizije objava, transient cacheove, osirotele metapodatke, spam komentare koji su bačeni u smeće ali nisu obrisani. Tablica wp_postmeta tiho raste. Nakon nekoliko godina, vaša baza radi pretraživanje cijele tablice od 800.000 redova da bi prikazala jednu stranicu. Nitko ne primjećuje jer nitko ne gleda.

Bez sloja cachinga. Bez ispravnog cachinga, WordPress regenerira svaku stranicu ispočetka pri svakom posjetu. Postavlja upite bazi, pokreće PHP, sastavlja HTML i šalje ga — svaki put iznova. Stranica kojoj treba 3 sekunde za generiranje generira se 10.000 puta mjesečno za potpuno isti sadržaj. To nije problem performansi. To je problem arhitekture.

Bez CDN-a. Vaše slike i resursi poslužuju se s jednog servera na jednoj lokaciji. Posjetitelj iz Londona zahtijeva sliku od 2MB s poslužitelja u Dallasu. Sama fizika dodaje stotine milisekundi. Pomnožite to sa svakim resursom na stranici.

Što učiniti

Popravci nisu komplicirani. Samo su neglamurozni.

Revidirajte pluginove. Deaktivirajte svaki pojedinačno i mjerite vrijeme učitavanja. Naći ćete pluginove koji dodaju 400ms, a ne isporučuju ništa vidljivo. Uklonite ih. Za one koje zadržite, provjerite učitavaju li resurse globalno kad bi trebali učitavati uvjetno. Većina stranica može prepoloviti broj pluginova bez gubitka ikakve funkcionalnosti.

Prebacite se na bolji hosting. Upravljani WordPress hosting ili mali VPS s ispravnom konfiguracijom nadmašit će svaki dijeljeni plan. Razlika između dijeljenog hosta od 9 dolara mjesečno i upravljanog od 30 dolara često je dvije do tri sekunde vremena učitavanja. To nije trošak — to je ulaganje koje se isplati samo kroz poziciju u pretraživačima.

Očistite bazu podataka. Obrišite revizije objava starije od 30 dana. Uklonite osirotele metapodatke. Očistite istekle transiente. Ograničite autoload u wp_options na ono što je stvarno potrebno. Baza koja je bila 500MB često može pasti na 50MB. Upiti postaju brži jer ima manje podataka za pretraživanje.

Dodajte ispravan caching. Page caching poslužuje statički HTML umjesto regeneriranja stranica. Object caching pohranjuje rezultate upita bazi u memoriju. Zajedno mogu pretvoriti učitavanje stranice od 3 sekunde u 300 milisekundi. Ovo nije značajka plugina — to je infrastrukturni sloj.

Stavite CDN ispred svega. Cloudflareov besplatni plan to rješava. Resursi se poslužuju s edge servera blizu posjetitelja. Slika od 2MB koja se učitavala 800ms iz Dallasa učitava se za 40ms s lokalnog edge čvora.

Dublje pitanje

Kada je stranica opet brza, vrijedi postaviti pitanje: je li WordPress još uvijek pravi alat?

Za tvrtke koje često objavljuju, upravljaju složenom e-trgovinom ili trebaju da netehničko osoblje svakodnevno ažurira sadržaj — da. WordPress s ispravnom infrastrukturom je solidna platforma. Pokreće 40% weba s razlogom.

Ali za tvrtku s marketinškom stranicom koja se mijenja dva puta godišnje, petnaest stranica sadržaja i kontakt formom — WordPress je nepotrebna infrastruktura. Statična stranica izgrađena na modernim alatima učitavala bi se ispod sekunde, ne bi zahtijevala nikakvo održavanje baze podataka, hosting bi koštao gotovo ništa i nikad se ne bi usporila bez obzira na promet.

Ne treba svaki problem isto rješenje. Ne treba svaka stranica istu arhitekturu.

Rezultat

Klijentova stranica učitava se za 1,8 sekundi sada. Isti sadržaj. Isti dizajn. Ista WordPress instalacija.

Uklonili smo 29 pluginova. Migrirali na upravljani hosting. Očistili 640.000 redova iz baze podataka. Dodali page caching i object caching. Stavili Cloudflare ispred.

Posao je trajao tjedan dana. Stranica je bila spora dvije godine.

Nitko nije okrivio infrastrukturu jer nitko nije gledao infrastrukturu. Okrivili su WordPress. Ali WordPress je samo radio na vrhu sustava koji nitko nije održavao.

To je obrazac. Alat radi. Infrastruktura ispod njega također mora raditi. A infrastruktura zahtijeva održavanje — ne jednom, nego kontinuirano.

Nevidljiv posao je držati stvari brzima.


Povezano

IB

Ivan Boban

Arhitekt sustava

Povezano

Ako je ovo vaš problem u praksi

Povezani Deep Dive

Pritisnite M za prikaz | Kliknite čvorove za navigaciju