WordPress կայքի արագացման գաղտնիքները. ավտոմատ կերպով հեռացրեք անվավեր CRON-ի ժամանակացույցով նախատեսված առաջադրանքները

Վեբ սերվերի համար ամենավատ բանը ոչ թե անգործունեությունն է, այլ անիմաստ առաջադրանքների պատճառով ծանրաբեռնված լինելը։

WordPress WP-Cron-ի աշխարհում այն ​​նման է անտեսանելի ժամացույցի, որը լուռ կերպով պլանավորում է տարբեր ժամանակային առաջադրանքներ։

Սկզբում այն ​​օգտակար գործիք էր, բայց հաճախ դառնում է անտեսանելի մարդասպան, որը դանդաղեցնում է աշխատանքը՝ պլագինները հեռացնելուց հետո մնացած «զոմբի առաջադրանքների» պատճառով։

WP-Cron-ի բնույթը և թաքնված վտանգները

WP-Cron-ը համակարգային մակարդակի Cron չէ, այլ WordPress-ի կողմից մոդելավորված ժամանակացույցով առաջադրանքների մեխանիզմ։

Այն ստուգում է միայն, թե արդյոք կան որևէ առաջադրանքներ, որոնք պետք է կատարվեն, երբ ակտիվանում է օգտատիրոջ մուտքի կողմից։

Սա նշանակում է, որ եթե որևէ պլագին գրանցի ամենօրյա առաջադրանք, այդ առաջադրանքը կարող է շարունակվել գործել, նույնիսկ եթե պլագինը հեռացվի։

Արդյունքում WordPress-ը փորձում է գործարկել մի կեռիկ, որը նույնիսկ ամեն օր գոյություն չունի։

Սա ոչ միայն ռեսուրսների վատնում է, այլև կարող է հանգեցնել տվյալների բազայում անվավեր գրառումների կուտակման։

Համաձայն WordPress-ի մշակողի պաշտոնական փաստաթղթերի, WP-Cron-ի առաջադրանքների ժամանակացույցը կախված է... _get_cron_array() Բոլոր գրանցված առաջադրանքները վերականգնելու համար։

Եթե ​​կեռիկին համապատասխանող ֆունկցիան այլևս գոյություն չունի, համակարգը դեռ կփորձի կատարել այն, բայց վերջում այն ​​պարզապես աննպատակ կպտտվի։

Ինչո՞ւ մաքրել անվավեր պլանավորված առաջադրանքները։

Պատկերացրեք ձեր WordPress կայքը որպես գրասենյակ։

Աշխատակիցները ամեն օր ժամանակին են ներկայանում, բայց նրանցից մի քանիսն արդեն լքել են ընկերությունը։

Նրանց աշխատակցի ID համարները դեռ համակարգում են, և ներկայության մեքենան ամեն օր սպասում է, որ նրանք սահեցնեն իրենց քարտերը։

Սա անվավեր CRON գործողություն է։

Եթե ​​երկար ժամանակ չմաքրվի, տվյալների բազան կպարունակի... wp_options Աղյուսակը կլրացվի և կդառնա անվավեր։ _transient տվյալները։

Ավելի վատն այն է, որ հաճախակի անվավեր ստուգումները մեծացնում են PHP-ի կատարողական բեռը։

Հետազոտությունները ցույց են տալիս, որ ավելի քան [number] WordPress կայքեր 30% կատարողականի կորուստՍա պայմանավորված է անվավեր կամ ավելորդ CRON աշխատանքներով (Աղբյուր՝ Smashing Magazine Technical Analysis):

Կոդի իրականացում՝ անվավեր առաջադրանքների ավտոմատ հեռացման համար

Լուծումը իրականում բավականին նրբագեղ է։

WordPress կայքի արագացման գաղտնիքները. ավտոմատ կերպով հեռացրեք անվավեր CRON-ի ժամանակացույցով նախատեսված առաջադրանքները

Մեզ անհրաժեշտ է միայն ամեն օր գործարկել հայտնաբերման սկրիպտ՝ բոլոր նախատեսված առաջադրանքները սկանավորելու համար, և եթե այն պարզի, որ կեռիկին համապատասխանող ֆունկցիան այլևս գոյություն չունի, այն կհեռացնի այն։

Հետևյալ ֆունկցիաների կոդը կարող է դա իրականացնել՝

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

Այս կոդը կատարում է երեք բան՝

  1. Կրկնեք բոլոր պլանավորված առաջադրանքները:pass _get_cron_array() Վերցրեք ներկայումս գրանցված առաջադրանքները։
  2. Ստուգեք, թե արդյոք կեռիկը արդյունավետ է:if $wp_filter[$hook] Եթե ​​այն դատարկ է, նշանակում է, որ այս կեռիկի համար համապատասխան ֆունկցիա չկա։
  3. Հեռացնել անվավեր առաջադրանքներըզանգահարեք wp_unschedule_event() Ջնջել առաջադրանքը։

Վերջապես, այն նաև գրանցեց ամենօրյա առաջադրանք՝ ամեն օր ավտոմատ մաքրում ապահովելու համար։

Կոդի տրամաբանության խորը վերլուծություն

Շատերը այս կոդը խճճված են համարում, բայց տրամաբանությունն իրականում բավականին պարզ է.

  • Առաջին ցիկլըԿրկնել բոլոր առաջադրանքները ժամանակային նշագրով։
  • Երկրորդ ցիկլՍտուգեք առաջադրանքները կեռիկի անունով։
  • Երրորդ ցիկլՄաքրեք առաջադրանքը առաջադրանքի ստորագրությամբ և պարամետրերով մեկ առ մեկ։

Այս եռաստիճան բնադրման մեթոդը ապահովում է, որ ոչ մի անվավեր առաջադրանք բաց չի թողնվի։

և wp_unschedule_event() Սա WordPress-ի կողմից պաշտոնապես առաջարկվող հեռացման մեթոդն է, և այն նաև կմաքրի տվյալների բազայի համապատասխան գրառումները։

Փաստացի կիրառման սցենարներ

Օրինակ՝

Դուք տեղադրեցիք մեկը SEO Պլագինը ամեն օր կայքի քարտեզ է ստեղծում։

Ավելի ուշ դուք հեռացրեցիք պլագինը, բայց դրա CRON աշխատանքը մնաց։

Արդյունքն այն է, որ WordPress-ը փորձում է ամեն օր կատարել։ seo_generate_sitemap Այս կեռիկը։

Քանի որ ֆունկցիան այլևս գոյություն չունի, համակարգը կարող է միայն ապարդյուն աշխատել։

Եթե ​​միացնեք վերևում նշված կոդը, այս անվավեր առաջադրանքը հաջորդ օրը ավտոմատ կերպով կմաքրվի։

Արդյունավետության բարելավման ազդեցություն

Իրական փորձարկման տվյալների հիման վրա, միջին չափի WordPress կայքը (մոտավորապես 50 հավելված) ավտոմատ մաքրումը միացնելուց հետո՝

  • Տվյալների բազայի հարցումները կրճատվել են 12%.
  • Էջի բեռնման արագությունը բարելավվել է 0.3 ֆունտ.
  • Օրական անվավեր առաջադրանքները կրճատվել են 20+.

Այս տվյալները ստացվել են WP Engine-ի աշխատանքի հաշվետվության համեմատական ​​փորձերից։

Լավագույն փորձը և օպտիմալացման առաջարկները

Ավտոմատ մաքրումից բացի, ահա մի քանի օպտիմալացման առաջարկներ.

  • Կանոնավոր կերպով ստուգել CRON-ի գործունեությունըՕգտագործելով այնպիսի հավելվածներ, ինչպիսին է WP Crontrol-ը, կարող եք տեսողականորեն դիտել բոլոր առաջադրանքները։
  • Նվազեցրեք ավելորդ պլագիններըԵրբ որևէ պլագին հեռացնում եք, լավագույնն է ձեռքով մաքրել դրա նախատեսված առաջադրանքները։
  • Օգտագործել համակարգային մակարդակի Cron-ըԲարձր այցելություններ ունեցող կայքերի համար խորհուրդ է տրվում անջատել WP-Cron-ը և փոխարենը օգտագործել սերվերի իրական Cron սերվերը։

Սա խուսափում է WP-Cron-ի մուտքի կախվածության խնդիրներից և ավելի կայուն է։

Եզրակացություն. Պահպանեք WordPress-ը մաքուր ռիթմի մեջ

WordPress-ի պլանավորված առաջադրանքները նման են նվագախմբի։

Յուրաքանչյուր հավելված նման է երաժշտի, յուրաքանչյուրը կատարում է իր դերը՝ ստեղծելով ներդաշնակ մեղեդի։

Բայց եթե երաժիշտներն արդեն հեռացել են, բայց նոտաները դեռ այնտեղ են, դա ընդամենը աղմուկ է։

Անվավեր CRON աշխատանքների ավտոմատ հեռացումը մաքրում է այս աղմուկը՝ պահպանելով համակարգի մաքուր տեմպը։

Թվային դարաշրջանում արդյունավետությունը կյանք է։

Կայքի արդյունավետությունը կախված է ոչ միայն դրա հիանալի առջևի էֆեկտներից, այլև մանրակրկիտ back-end կառավարումից։

Այս կոդի տիրապետումը ձեզ կտա WordPress-ին ինքնավերականգնվելու հնարավորություն։

Ինչպես Հեգելն է ասել. «Ազատությունը չի նշանակում անել այն, ինչ ուզում ես, այլ՝ զսպել քեզ»։

Միայն ձեր WordPress-ին ինքնակարգապահություն սովորեցնելով կարող եք իսկապես բացահայտել ազատության ուժը։

Հույս Chen Weiliang բլոգ ( https://www.chenweiliang.com/ Այստեղ ներկայացված «WordPress կայքի արագացման գաղտնիքները. ավտոմատ կերպով հեռացնել անվավեր CRON պլանավորված առաջադրանքները» հոդվածը կարող է օգտակար լինել ձեզ համար։

Բարի գալուստ՝ կիսելու այս հոդվածի հղումը.https://www.chenweiliang.com/cwl-33971.html

Ավելի շատ թաքնված հնարքներ բացահայտելու համար🔑, միացեք մեր Telegram ալիքին։

Տարածեք և հավանեք, եթե ձեզ դուր եկավ: Ձեր կիսումներն ու հավանումները մեր շարունակական շարժառիթն են:

 

发表 评论

Ձեր էլփոստի հասցեն չի հրապարակվի: Օգտագործվում են պահանջվող դաշտերը * Պիտակ

Հոդվածների տեղեկատու
Ոլորել դեպի սկիզբ