Imenik članaka
Najgora stvar za web poslužitelj nije zastoj, već usporavanje zbog besmislenih zadataka.
在 WordPress U svijetu WP-Crona, to je poput nevidljivog sata koji tiho zakazuje razne vremenski ograničene zadatke.
Izvorno je bio koristan alat, ali često postaje nevidljivi ubojica koji usporava performanse zbog "zombie zadataka" koji ostaju nakon deinstalacije dodataka.
Priroda i skrivene opasnosti WP-Cron-a
WP-Cron nije Cron na razini sustava, već mehanizam zakazanih zadataka koji simulira sam WordPress.
Provjerava samo postoje li zadaci koje treba izvršiti kada ih pokrene korisnički pristup.
To znači da ako dodatak registrira dnevni zadatak, taj zadatak može i dalje postojati čak i ako se dodatak deinstalira.
Rezultat je da WordPress pokušava izvršiti udicu koja ne postoji svaki dan.
To ne samo da troši resurse, već može dovesti i do nakupljanja nevažećih zapisa u bazi podataka.
Prema službenoj dokumentaciji za WordPress developere, WP-Cron-ovo raspoređivanje zadataka ovisi o... _get_cron_array() Za preuzimanje svih registriranih zadataka.
Ako funkcija koja odgovara udici više ne postoji, sustav će je i dalje pokušavati izvršiti, ali na kraju će se samo besciljno vrtjeti.
Zašto čistiti nevažeće zakazane zadatke?
Zamislite svoju WordPress stranicu kao ured.
Zaposlenici dolaze na vrijeme svaki dan, ali neki od njih su već napustili tvrtku.
Njihovi identifikacijski brojevi zaposlenika još su uvijek u sustavu, a aparat za evidenciju prisutnosti čeka da svaki dan provuku svoje kartice.
Ovo je nevažeća CRON operacija.
Ako se dugo ne čisti, baza podataka će sadržavati... wp_options Tablica će se popuniti i postati nevažeća. _transient podaci.
Još gore, česte nevažeće provjere povećavaju opterećenje izvršavanja PHP-a.
Istraživanja pokazuju da preko [broj] WordPress web stranica 30% gubitka performansiTo je zbog nevažećih ili redundantnih CRON poslova (Izvor: Tehnička analiza časopisa Smashing).
Implementacija koda za automatsko uklanjanje nevažećih zadataka
Rješenje je zapravo prilično elegantno.

Samo trebamo svakodnevno pokretati skriptu za detekciju kako bismo skenirali sve planirane zadatke, a ako utvrdi da funkcija koja odgovara udici više ne postoji, uklonit će je.
Sljedeći kod funkcija može to postići:
add_action('wpcwl_remove_invild_crons', function(){
global $wp_filter;
$wp_crons = _get_cron_array();
foreach ($wp_crons as $timestamp => $wp_cron) {
foreach ($wp_cron as $hook => $dings) {
if(empty($wp_filter[$hook])){
foreach( $dings as $sig=>$data ) {
wp_unschedule_event($timestamp, $hook, $data['args']);
}
}
}
}
});
if(!wp_next_scheduled('wpcwl_remove_invild_crons')) {
wp_schedule_event( time(), 'daily', 'wpcwl_remove_invild_crons' );
}
Ovaj kod radi tri stvari:
- Ponavljaj kroz sve planirane zadatke:proći
_get_cron_array()Dohvati trenutno registrirane zadatke. - Provjerite je li udica učinkovita:ako
$wp_filter[$hook]Ako je prazno, to znači da ne postoji odgovarajuća funkcija za ovu udicu. - Uklonite nevažeće zadatke: poziv
wp_unschedule_event()Izbriši zadatak.
Konačno, također je registrirao dnevni zadatak kako bi se osiguralo automatsko čišćenje svaki dan.
Dubinska analiza logike koda
Mnogi ljudi smatraju ovaj kod zamršenim, ali logika je zapravo prilično jednostavna:
- Prva petlja: Ponavljaj kroz sve zadatke po vremenskoj oznaci.
- Druga petljaProvjerite zadatke prema nazivu kuke.
- Treća petljaOčistite zadatak po potpisu zadatka i parametrima jedan po jedan.
Ova metoda gniježđenja na tri razine osigurava da se ne propusti nijedan nevažeći zadatak.
i wp_unschedule_event() Ovo je metoda uklanjanja koju službeno preporučuje WordPress, a također će očistiti povezane zapise u bazi podataka.
Scenariji primjene u stvarnom svijetu
Na primjer.
Instalirali ste jedan SEO Dodatak svakodnevno generira mapu stranice.
Kasnije ste deinstalirali dodatak, ali njegov CRON zadatak je ostao.
Rezultat je da WordPress pokušava izvršavati svaki dan. seo_generate_sitemap Ova udica.
Budući da funkcija više ne postoji, sustav može samo uzalud raditi.
Ako omogućite gornji kod, ovaj nevažeći zadatak će se automatski očistiti sljedeći dan.
Učinak poboljšanja performansi
Na temelju stvarnih testnih podataka, WordPress web stranica srednje veličine (otprilike 50 dodataka) nakon omogućavanja automatskog čišćenja:
- Smanjeni upiti u bazi podataka 12%.
- Brzina učitavanja stranice se poboljšala 0.3 sekunde.
- Smanjeni dnevni nevažeći zadaci 20+.
Ovi podaci potječu iz usporednih eksperimenata u izvješću o performansama WP Enginea.
Najbolje prakse i prijedlozi za optimizaciju
Uz automatsko čišćenje, evo nekoliko prijedloga za optimizaciju:
- Redovito provjeravajte CRON operacijePomoću dodataka poput WP Crontrola možete vizualno pregledati sve zadatke.
- Smanjite suvišne dodatkePrilikom deinstalacije dodatka, najbolje je ručno izbrisati njegove zakazane zadatke.
- Koristite Cron na razini sustavaZa web stranice s velikim prometom preporučuje se onemogućavanje WP-Cron-a i korištenje stvarnog Cron servera poslužitelja.
Ovo izbjegava probleme s ovisnošću pristupa WP-Cronu i stabilnije je.
Zaključak: Održavajte WordPress u čistom ritmu
Planirani zadaci u WordPressu su poput benda.
Svaki dodatak je poput glazbenika, svaki igra svoju ulogu u stvaranju skladne melodije.
Ali ako su glazbenici već otišli, ali su note još uvijek tu, to je samo buka.
Automatsko uklanjanje nevažećih CRON poslova čisti ovu buku, održavajući sustav u ispravnom stanju.
U digitalnom dobu, učinkovitost je život.
Učinkovitost web stranice ne ovisi samo o njezinim cool efektima na prednjem dijelu, već i o njezinom pažljivom upravljanju na pozadini.
Savladavanje ovog koda dat će vam WordPressu mogućnost samoizlječenja.
Kao što je Hegel jednom rekao: „Sloboda nije činiti što god želiš, već samoograničavanje.“
Samo podučavanjem WordPressa samodisciplini možete istinski osloboditi moć slobode.
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ Članak "Tajne ubrzanja WordPress web stranice: Automatsko uklanjanje nevažećih CRON zakazanih zadataka" podijeljen ovdje mogao bi vam biti koristan.
Dobrodošli da podijelite vezu ovog članka:https://www.chenweiliang.com/cwl-33971.html
