Geheimen voor een snellere WordPress-website: Ongeldige CRON-taken automatisch verwijderen

Het ergste voor een webserver is niet downtime, maar dat hij wordt vertraagd door zinloze taken.

hood.discount In de wereld van WP-Cron is het als een onzichtbare klok die geruisloos verschillende taken met een vaste tijdsduur inplant.

Het was oorspronkelijk een handig hulpmiddel, maar het wordt vaak een onzichtbare boosdoener die de prestaties vertraagt ​​door de "zombieprocessen" die achterblijven na het verwijderen van plug-ins.

De aard en verborgen gevaren van WP-Cron

WP-Cron is geen Cron-taak op systeemniveau, maar een mechanisme voor geplande taken dat door WordPress zelf wordt gesimuleerd.

Het controleert alleen of er taken zijn die moeten worden uitgevoerd wanneer een gebruiker toegang krijgt.

Dit betekent dat als een plugin een dagelijkse taak registreert, die taak mogelijk nog steeds bestaat, zelfs als de plugin wordt verwijderd.

Het gevolg is dat WordPress probeert een hook uit te voeren die niet eens dagelijks bestaat.

Dit leidt niet alleen tot verspilling van middelen, maar kan ook resulteren in een opeenhoping van ongeldige gegevens in de database.

Volgens de officiële WordPress-documentatie voor ontwikkelaars is de taakplanning van WP-Cron afhankelijk van... _get_cron_array() Om alle geregistreerde taken op te halen.

Als de functie die bij de hook hoort niet meer bestaat, zal het systeem deze nog steeds proberen uit te voeren, maar uiteindelijk zal het alleen maar doelloos blijven draaien.

Waarom ongeldige geplande taken opruimen?

Beschouw je WordPress-site als een kantoor.

Werknemers melden zich elke dag stipt op tijd, maar sommigen van hen hebben het bedrijf al verlaten.

Hun personeelsnummers staan ​​nog steeds in het systeem en de aanwezigheidsregistratiemachine staat klaar om hen elke dag hun pasjes te laten scannen.

Dit is een ongeldige CRON-bewerking.

Als de database lange tijd niet wordt opgeschoond, zal deze de volgende gegevens bevatten... wp_options De tabel raakt vol en wordt ongeldig. _transient gegevens.

Erger nog, frequente ongeldige controles verhogen de uitvoeringsbelasting van PHP.

Onderzoek wijst uit dat er meer dan [aantal] WordPress-websites zijn. 30% prestatieverliesDit komt door ongeldige of overbodige CRON-taken (Bron: Technische analyse van Smashing Magazine).

Code-implementatie voor het automatisch verwijderen van ongeldige taken.

De oplossing is eigenlijk best elegant.

Geheimen voor een snellere WordPress-website: Ongeldige CRON-taken automatisch verwijderen

We hoeven alleen maar dagelijks een detectiescript uit te voeren om alle geplande taken te scannen. Als het script vaststelt dat de functie die bij de hook hoort niet meer bestaat, wordt deze verwijderd.

De volgende functiecode kan dit bereiken:

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' );
}

Deze code doet drie dingen:

  1. Doorloop alle geplande taken.:doorgang _get_cron_array() Momenteel geregistreerde taken ophalen.
  2. Test of de haak effectief is.:als $wp_filter[$hook] Als het veld leeg is, betekent dit dat er geen overeenkomstige functie voor deze hook bestaat.
  3. Ongeldige taken verwijderen: telefoongesprek wp_unschedule_event() Verwijder de taak.

Ten slotte registreerde het ook een dagelijkse taak om ervoor te zorgen dat er elke dag automatisch wordt schoongemaakt.

Diepgaande analyse van de codelogica

Veel mensen vinden deze code ingewikkeld, maar de logica erachter is eigenlijk vrij eenvoudig:

  • Eerste lusDoorloop alle taken op basis van hun tijdstempel.
  • Tweede lusControleer taken aan de hand van de hooknaam.
  • Derde lusVerwijder de opschoontaak één voor één, op basis van de taaksignatuur en de parameters.

Deze methode met drie geneste niveaus zorgt ervoor dat geen enkele ongeldige taak wordt overgeslagen.

en wp_unschedule_event() Dit is de verwijderingsmethode die officieel door WordPress wordt aanbevolen, en hiermee worden ook de bijbehorende records in de database opgeschoond.

Werkelijke toepassingsscenario's

Bijvoorbeeld.

Je hebt er een geïnstalleerd SEO De plugin genereert dagelijks een sitemap.

Je hebt de plugin later verwijderd, maar de bijbehorende CRON-taak bleef actief.

Het resultaat is dat WordPress elke dag probeert te werken. seo_generate_sitemap Deze haak.

Aangezien de functie niet meer bestaat, kan het systeem tevergeefs blijven draaien.

Als u de bovenstaande code inschakelt, wordt deze ongeldige taak de volgende dag automatisch opgeruimd.

Effect van prestatieverbetering

Gebaseerd op daadwerkelijke testgegevens, een middelgrote WordPress-website (ongeveer 50 plugins) na het inschakelen van automatische opschoning:

  • Databasequery's verminderd 12%.
  • De laadsnelheid van de pagina is verbeterd. 0.3 seconden.
  • Dagelijkse ongeldige taken verminderd 20+.

Deze gegevens zijn afkomstig uit vergelijkende experimenten in het prestatierapport van WP Engine.

Aanbevelingen voor beste werkwijzen en optimalisatie

Naast de automatische opruimfunctie volgen hier enkele optimalisatietips:

  • Controleer de CRON-activiteiten regelmatig.Met plugins zoals WP Crontrol kunt u alle taken visueel bekijken.
  • Verminder overbodige plug-insBij het verwijderen van een plugin is het het beste om de geplande taken handmatig te wissen.
  • Gebruik Cron op systeemniveau.Voor websites met veel verkeer wordt aangeraden WP-Cron uit te schakelen en in plaats daarvan de eigen Cron-server van de server te gebruiken.

Dit voorkomt de toegangsafhankelijkheidsproblemen van WP-Cron en is stabieler.

Conclusie: Zorg voor een gestructureerd en consistent WordPress-systeem.

De geplande taken van WordPress zijn als een band.

Elke plugin is als een muzikant, die elk zijn eigen rol speelt om een ​​harmonieuze melodie te creëren.

Maar als de muzikanten al vertrokken zijn en de bladmuziek er nog ligt, dan is dat gewoon lawaai.

Het automatisch verwijderen van ongeldige CRON-taken ruimt deze ruis op, waardoor het systeem soepel blijft draaien.

In het digitale tijdperk is efficiëntie van levensbelang.

De prestaties van een website hangen niet alleen af ​​van de aantrekkelijke front-end, maar ook van het zorgvuldige beheer van de back-end.

Door deze code te beheersen, geef je WordPress de mogelijkheid om zichzelf te herstellen.

Zoals Hegel ooit zei: "Vrijheid is niet doen wat je wilt, maar zelfbeheersing."

Alleen door je WordPress-website zelfdiscipline bij te brengen, kun je de ware kracht van vrijheid ontketenen.

发表 评论

Uw e-mailadres wordt niet gepubliceerd. 必填 项 已 用 * 标注

Scroll naar boven