tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

WP-CLI: Hidas wordpress-sivusto

On sen kiljuuna tapaa testata ja tutkia WordPress-sivuston toimintaa. Voi käyttää ulkoisia kolmannen osapuolen palveluita, plugineita löytyy useampaan lähtöön ja sitten voi devailla itse. Yleisin syy selvittää tekniikkaa ja leikkiä IT-lääkäriä on varmasti sivuston kaatuminen tai jonkin lisäosan tai teeman toimimattomuus. Ne ovat maallikolle helppoja. Otetaan pois päältä. Mutta mitä tehdä, jos käsissä on hidas sivusto, johon on jo kaikki yleiset temput tehty? Urakkaa hieman helpottaa kun edes tietää missä kohtaa hidastus tapahtuu

WP-CLI on nopein tapa hahmottaa sivuston varsinaisen rakentamisen pullonkaulaa. Kun hidastus on löytynyt, niin tietää jo hieman paremmin mitä on ehkä tehtävissä. Käytetään WP CLI:tä tällä kertaa nopeaan analysointiin.

Asenna wp profile.

wp package install wp-cli/profile-command

Mene sivuston juureen.

cd /var/www/html

Varmista, että sinulla wp-config.php -tiedostossa SAVEQUERIES sallittuna.

define('SAVEQUERIES', true);

Saat helpin näkyviin:

wp profile --help

Sinulla on neljä vaihtoehtoa:

  • stage hitaasti latautuvalle sivulle, jolloin saat tiedot mm. latausajat kolmesta eri vaiheesta
  • hook, joka esittää tietoa WordPressistä per action ja filter
  • eval, joka tutkii hyökkääjän mahdollisuutta ajaa koodia. Tai jotain
  • eval file tekee… jotain

Stage

Stage eli tila jakautuu kolmeen eri vaiheeseen:

  • bootstrap, jolloin WordPress asettaa itsensä
  • main_query, jolloin WordPress ajaa kutsut ja rakentaa sisällön
  • template, jolloin WordPress tekee näkyvän sisällön

Testataan Katiskan etusivulla, koska se on sivustona masentavan hidas.

wp profile stage

Saadaan yleiskatsaus kuinka paljon on aikaa mennyt missä vaiheessa, paljonko on saatu välimuistiin tai montako kyselyä on tehty. Taulukosta näkyy heti, että WordPressin käynnistäminen kaikkineen vie eniten aikaa. Niinhän se tuppaa tekemään.

Bootstrap

Nyt katsotaan mitä bootstrapissa tapahtuu.

wp profile stage bootstrap --spotlight

--spotlight suodattaa nolla-arvot pois.

Initilialisointi ja ladatut pluginit vievät paljon aikaa, joka sekään ei ole yllätys.

Hook/plugins

Vilkaistaan lisäosien tekemisiä.

wp profile hook plugins_loaded --fields=callback,time,location --spotlight

Ei mitään yllättävää täälläkään. Woocommercen laskuja tekevä lisäosa asettaa itseään jo etusivulla, joka on minusta omituista. Sama juttu Woocommerce Appointmentsin kanssa, joka on buukattavien aikojen kalenteriosa Woocommercessa. Jetpack kuormittaa myös, mutta sen pitäisi jokaisen Worpdress-käyttäjän tietää. Yksi tyhjä rivi, josta en tiedä mikä se on.

Hook/init

Katsotaan mitä init näyttää.

wp profile hook init --fields=callback,time,location --spotlight

Tämäkin varmistaa sen minkä tiesin: tyylin page builder on kuormittaja. Mutta sekin on asia, jonka jokaisen mitä tahansa pagebuilderia käyttävän WordPress-sivuston ylläpitäjän pitäisi tietää. Ei ole olemassa mitään sellaista kuin kevyt page builder. Tai aidosti edes nopeaa.

Eniten aikaa vei kuitenkin wp_loaded:after. Siinä menee melkoinen osa plugineista, AJAXia, minifikaatiota jne. Siksi se on niin aikaavievä. En pääse, tai osaa, katsoa mitkä kaikki sitä käyttävät, mutta luultavasti aivan kaikki, jotka toimivat etusivulla – ja se lista olisi kiva saada. Siihen voi toiminnallisuuksien suhteen sitten käyttää muita työkaluja.

Näiden tulosten mukaan Katiskassa ei ole mikään rikki. Siellä vaan käytetään liikaa plugineja ja raskasta teemaa. Se, että tuon sai varmistettua ja että se ei enää ole akselia ”tietysti se on näin”, on arvo jo sinällään.

Hook

Hook esittää nimensä mukaisia asioita.

wp profile --all --spotlight

Tästäkään en löytänyt mitään ihmeellistä. Kun ottaisi pois Jetpackin ja Woocommercen sekä vaihtaisi teeman, niin saisi (ehkä) vauhtia lisää.

Eval

Tällä saa ajettua PHP-koodia, tai jotain. Koska en tee minkäänlaisia kehittäjähommia (ei, teemojen CSS:n säätö ei todellakaan ole devaamista, vaikka muutamat ”kolleegat” itseään sillä myyvätkin), niin en keksi tällä mitään tarvetta. Sinulla voi olla asia toisin.

wp profile eavl --help

Eval file

Annetaan helpin kertoa loput, koska en tiedä. Jotenkin tämäkin liittyy PHP-koodin ajamisiin.

wp config eval-file --help

Loppujen lopuksi

wp profile on luultavasti hyödyllisin devaajille, mutta meille maallikoille se antaa mitattavaa aikaa vertailtavaksi eri kohdissa sivun rakentamista. Se on siten yksi mittari jonkun Pingdomin lisäksi.

Aidosti siitä ei ole suurtakaan hyötyä normaalille optimisoinnille, koska jokaisen luulisi tietävän, että Worpdressin nopeusotimointi tarkoittaa pienempää bittipainoa, joka saadaan muutamalla tempulla;

  • kuvien olisi hyvä olla pienempiä kuin suurempia
  • kuvat olisi hyvä optimoida, joka aidosti tarkoittaa JPEG-kuvien kovempaa pakkaamista
  • välimuistien pitäisi olla olemassa ja toimia
  • osa plugineista voisi ehkä jättää asentamatta
  • tyylejä löytyy eri painoluokista
  • osa servereistä on nopeita, osa hitaita
  • HTTP/2 on usein nopeampi kuin HTTP/1.1

Se missä wp profile muuttuu ehkä aidosti hyödylliseksi, on kun saitti alkaa yhtä äkkiä ryömimään. Silloin diagnosointi kannattaa aloittaa tällä.