6 modulis · 6.3
Vaizdai, PHP ir kiti greičio patobulinimai
6 modulis: Greitis · Skaitymo trukmė: 9 min.
Mokymosi tikslas: Po šios pamokos galėsite pritaikyti didžiausius likusius greičio patobulinimus ir išmatuoti jų poveikį.
Pagrindinės sąvokos: vaizdų optimizavimas, WebP ir AVIF, lazy loading, LCP vaizdas, fetchpriority, PHP versija, duomenų bazės tvarkymas (versijos, transients, autoload), WP-Cron, tikras cron, DISABLE_WP_CRON, išoriniai šriftai, Heartbeat
Dirbkite teisinga tvarka
Po puslapio talpyklos (pamoka 6.2) štai patobulinimai, kurie duoda daugiausia naudos, maždaug pagal pastangų ir efekto santykį:
- vaizdų sutvarkymas;
- aktuali PHP versija;
- mažiau išorinių elementų ir sunkių įskiepių;
- sutvarkyta duomenų bazė;
- suplanuotos užduotys tikrame cron.
Matuokite prieš ir po kiekvieno žingsnio (pamoka 6.1), kitaip nesužinosite, kas padėjo. Ir darykite po vieną dalyką vienu metu.
Vaizdai: didžiausia nauda naršyklėje
Daugumoje puslapių vaizdai sudaro didžiausią dalį to, ką lankytojas atsisiunčia. Tai, ko mokėtės 4.4 pamokoje, čia atsiperka:
- Teisingas dydis: neįkelkite didesnio, nei reikia, ir leiskite WordPress per srcset pasiūlyti mažesnius formatus.
- Glaudinimas ir formatas: WebP paprastai yra gerokai mažesnis už JPEG esant tai pačiai kokybei; AVIF dažnai dar mažesnis. Įskiepis gali konvertuoti esamus vaizdus ir pateikti mažesnę versiją naršyklėms, kurios tai palaiko. Patikrinkite, ar konvertavimas vyksta Jūsų pačių serveryje, ar per išorinę paslaugą.
- Lazy loading, bet ne viskam. WordPress automatiškai suteikia vaizdams
loading="lazy", išskyrus pirmąjį didelį vaizdą viršuje. Tas vaizdas dažnai yra LCP elementas (pamoka 6.1): didžiausia turinio dalis, kurią lankytojas pamato pirmiausia. Jei jis būtų kraunamas lazy, naršyklė tai atidėtų ir Jūsų LCP pablogėtų. Todėl WordPress dažnai LCP kandidatui suteikiafetchpriority="high", kad naršyklė jį gautų pirmiausia.
<img src="hero-1536x864.webp" width="1536" height="864"
fetchpriority="high" alt="Dirbtuvė su eilėje sustatytais dviračiais">
<img src="team-768x512.webp" width="768" height="512"
loading="lazy" alt="Komanda prie parduotuvės">Viena spąstų: kai kurios temos, puslapių kūrimo įrankiai ir optimizavimo įskiepiai lazy loading pritaiko ir pirmajam vaizdui, arba didelį vaizdą įkelia kaip foną per CSS (tai aptinkama vėliau). PageSpeed Insights, skiltyje LCP, matysite, kuris elementas tai yra ir ar jis kraunamas lazy.
PHP: nemokamas greitis
Kiekviena nauja didelė PHP versija yra greitesnė už ankstesnę, ir WordPress svetainės iš to iškart gauna naudą, nieko nekeičiant Jūsų svetainėje. Be to, senos versijos nebegauna saugumo atnaujinimų (pamoka 8.4). Jei pereinate prie naujos versijos, patikrinkite, ar Jūsų įskiepiai ir tema ją palaiko, ir, jei įmanoma, pirmiausia padarykite tai bandomojoje aplinkoje (staging).
PHP nustatymuose taip pat atkreipkite dėmesį į:
- OPcache: pas daugumą talpinimo paslaugų teikėjų įjungta pagal numatymą. Pasekmė: pakeistas PHP failas gali šiek tiek užtrukti, kol PHP pradės naudoti naują versiją.
- memory_limit: per žema reikšmė sukelia klaidas sunkiuose puslapiuose; labai aukšta reikšmė svetainės nepagreitins.
Išoriniai elementai ir sunkūs įskiepiai
Kiekvienas kitos šalies elementas yra papildomas ryšys ir papildomas laukimo laikas: šriftai iš išorinės paslaugos, įterptas vaizdo įrašas, pokalbių valdiklis, matavimo kodai, socialinių tinklų mygtukai, žemėlapis. Klausimai kiekvienam elementui:
- Ar tai būtina? Vaizdo įrašą, kurio beveik niekas nežiūri, galima pakeisti vaizdu su nuoroda.
- Ar tai galima daryti lokaliai? Šriftus dažniausiai galima talpinti savo serveryje (su įskiepiu arba per theme.json naudojant blokų temą). Tai sutaupo vieną ryšį ir yra geriau Jūsų privatumui (pamoka 9.3).
- Ar tai gali būti vėliau? Pokalbių valdiklis ar vaizdo įrašas gali būti įkeliamas tik po paspaudimo.
Įskiepių atveju padeda matavimas su X-Ray (talpinimo su CloudLinux atveju) arba su įskiepiu, tokiu kaip Query Monitor (laikinai įjungti, matomas tik administratoriams). Jie parodo, kuris įskiepis sunaudoja daugiausiai duomenų bazės užklausų ar laiko.
Duomenų bazės tvarkymas
Duomenų bazė auga dėl dalykų, kurių nematote:
- Įrašo versijos (pamoka 4.1): kiekviena išsaugota kiekvieno puslapio versija. Apribokite jas su
WP_POST_REVISIONSir išvalykite senas. - Šlamšto ir šiukšlinės komentarai, ir šiukšlinėje esantys įrašai.
- Transients: laikini įskiepių duomenys
wp_optionslentelėje, kurie kartais nebūna išvalomi. - Autoload: parinktys
wp_optionslentelėje su įjungtuautoloadyra įkeliamos iš karto su kiekviena užklausa. Įskiepiai, kuriuos jau seniai pašalinote, kartais ten palieka didelius duomenų kiekius. Tinklalapio būklė (pamoka 5.4) įspėja, jei autoload duomenys yra labai dideli. - Žurnalų (log) lentelės iš įskiepių (statistika, saugumo žurnalai, el. pašto žurnalai), kurios niekada nėra išvalomos.
Tvarkyti galima su tvarkymo įskiepiu, su WP-CLI (wp transient delete --expired, wp post delete $(wp post list --post_type=revision --format=ids) --force), arba naudojant phpMyAdmin optimizavimo funkciją pačioms lentelėms. Visada pirmiausia pasidarykite atsarginę kopiją. Nieko nešalinkite, jei nežinote, kas tai yra.
Suplanuotos užduotys: WP-Cron
WordPress turi užduotis, kurios turi vykdytis tam tikru laiku: paskelbti suplanuotą įrašą, patikrinti atnaujinimus, leisti veikti atsarginių kopijų įskiepiui. Tai vadinama WP-Cron. Pagal numatymą WP-Cron neveikia pagal laikrodį, o apsilankymo metu: kiekvienos puslapio užklausos metu WordPress patikrina, ar yra paruošta užduotis. Du trūkumai:
- Esant mažam lankytojų skaičiui, užduotys vykdomos per vėlai (suplanuotas įrašas pasirodo tik po pirmo kito apsilankymo).
- Esant dideliam lankytojų skaičiui, tikrinama labai dažnai, ir sunki užduotis gali sulėtinti būtent to lankytojo puslapį.
Geriau: išjunkite WP-Cron apsilankymų metu ir leiskite serverio tikram cron darbui jį vykdyti kas penkias ar dešimt minučių. wp-config.php faile (virš eilutės „stop editing“):
define( 'DISABLE_WP_CRON', true );Ir savo talpinimo valdymo skydelio cron ekrane sukurkite užduotį, kas 10 minučių:
*/10 * * * * /usr/local/bin/php /home/gebruiker/domains/example.com/public_html/wp-cron.php >/dev/null 2>&1Kelias iki PHP ir iki Jūsų svetainės skiriasi priklausomai nuo talpinimo paslaugų teikėjo; peržiūrėkite savo valdymo skydelio instrukcijas. Arba naudokite WP-CLI: wp cron event run --due-now. Vėliau Tinklalapio būklėje patikrinkite, ar nėra atsiliekančių suplanuotų užduočių.
Heartbeat ir administravimas
WordPress skydelis, kol jis atidarytas, kas 15-60 sekundžių bendrauja su serveriu (Heartbeat): dėl automatinio išsaugojimo, pranešimo, kad kažkas kitas redaguoja tą patį įrašą, ir dėl pranešimų. Jei paliksite dešimt skirtukų su skydeliu atidarytus visą dieną, tai sudarys tūkstančius užklausų. Uždarykite nenaudojamus skirtukus. Kai kurie talpyklos įskiepiai gali sulėtinti Heartbeat; visiškai jo išjungti nereikia, nes tai sugadins automatinį išsaugojimą.
Santrauka
- Po puslapio talpyklos: vaizdai, PHP versija, išoriniai elementai ir įskiepiai, duomenų bazė, cron. Matuokite prieš ir po, po vieną žingsnį vienu metu.
- Lazy loading viskam, išskyrus didelį vaizdą viršuje; jam geriau suteikti
fetchpriority="high". - Naujesnė PHP versija yra nemokamas greitis, jei tik Jūsų įskiepiai ją palaiko.
- Sutvarkykite versijas, transients, šlamštą ir didelius autoload duomenis, visada su atsargine kopija.
- Nustatykite WP-Cron veikti per tikrą cron darbą su
DISABLE_WP_CRONir užduotimi savo valdymo skydelyje.
Testas (quiz)
Užduotis
Užduotis A6.3: Lazy loading ir formatai Jūsų pradiniame puslapyje. Įveskite savo svetainės adresą. Programa perskaitys pradinį puslapį ir patikrins vaizdus: ar pirmasis didelis vaizdas NETURI loading="lazy" (ir pageidautina turi fetchpriority="high"), ar tolesni vaizdai turi lazy loading, ir kokia vaizdų dalis yra WebP arba AVIF formato?
Užduotis D6.3: Prieš ir po. Išmatuokite savo svetainės puslapį tris kartus naudodami PageSpeed Insights (mobiliojo įrenginio režimu) ir užsirašykite vidurinę LCP, INP (arba lab reikšmę Total Blocking Time, jei nėra lauko duomenų), CLS ir TTFB iš A6.1 užduoties. Tada įgyvendinkite vieną šios pamokos patobulinimą (vaizdai, PHP versija, išorinio elemento pašalinimas, duomenų bazės sutvarkymas arba tikras cron). Vėl išmatuokite tris kartus ir užsirašykite naujas reikšmes. Aprašykite, ką padarėte, ir ar skirtumas yra didesnis už įprastą svyravimą tarp matavimų.
Užduotis D6.3: Prieš ir po
Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.
Užpildyti šeši matavimai, įgyvendintas vienas iš pamokoje minėtų patobulinimų (paveikslėliai, talpykla, PHP versija, mažiau įskiepių ar išorinių scenarijų) ir pateikta išvada, kurioje paminėtas svyravimas: skirtumas, mažesnis už Jūsų matavimų sklaidą, mažai ką reiškia.
Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.
Papildoma literatūra
Šiuose straipsniuose aprašomi veiksmai WebOké valdymo skydeliuose; kituose skydeliuose jie veikia panašiai.
- DirectAdmin vadovas 14.1: PHP versijos pasirinkimas (Select PHP version)
- DirectAdmin vadovas 12.7: Duomenų bazės patikrinimas, taisymas ir optimizavimas
- DirectAdmin vadovas 15.1: Periodinės užduotys: automatinis užduočių vykdymas
- Cron užduoties arba užduoties sukūrimas (ir ką daryti, jei ji neveikia)
- DirectAdmin vadovas 17.4: X-Ray: lėtų puslapių aptikimas
- WP-Cron susiejimas su sistemos cron (developer.wordpress.org, anglų kalba): https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/
- Lazy loading ir LCP (web.dev, anglų kalba): https://web.dev/articles/lcp-lazy-loading
