Сакрэты паскарэння працы вэб-сайта WordPress: аўтаматычнае выдаленне няправільных запланаваных задач CRON

Найгоршае для вэб-сервера — гэта не прастой, а збой з-за бессэнсоўных задач.

WordPress У свеце WP-Cron гэта як нябачны гадзіннік, які ціха плануе розныя задачы па часе.

Першапачаткова гэта быў карысны інструмент, але часта ён становіцца нябачным забойцам, які запавольвае прадукцыйнасць з-за «зомбі-задач», якія застаюцца пасля выдалення плагінаў.

Характар ​​і схаваныя небяспекі WP-Cron

WP-Cron — гэта не сістэмны Cron, а хутчэй механізм запланаваных задач, мадэляваны самім WordPress.

Ён правярае толькі наяўнасць задач, якія трэба выканаць, калі яны запускаюцца доступам карыстальніка.

Гэта азначае, што калі плагін рэгіструе штодзённую задачу, гэтая задача можа існаваць, нават калі плагін выдалены.

У выніку WordPress спрабуе выканаць перахоп, якога нават не існуе кожны дзень.

Гэта не толькі марнуе рэсурсы, але і можа прывесці да назапашвання несапраўдных запісаў у базе дадзеных.

Згодна з афіцыйнай дакументацыяй распрацоўшчыка WordPress, планаванне задач WP-Cron залежыць ад... _get_cron_array() Каб атрымаць усе зарэгістраваныя задачы.

Калі функцыя, якая адпавядае перахопніку, больш не існуе, сістэма ўсё роўна будзе спрабаваць яе выканаць, але ў выніку будзе проста бесмэтна круціцца.

Навошта ачышчаць несапраўдныя запланаваныя задачы?

Уявіце сабе свой сайт WordPress як офіс.

Супрацоўнікі прыходзяць на працу своечасова кожны дзень, але некаторыя з іх ужо звольніліся з кампаніі.

Іх ідэнтыфікацыйныя нумары супрацоўнікаў усё яшчэ захоўваюцца ў сістэме, і аўтамат уліку наведвальнасці штодня чакае, пакуль яны правядуць сваімі карткамі.

Гэта няправільная аперацыя CRON.

Калі база дадзеных доўга не чысціцца, яна будзе ўтрымліваць... wp_options Табліца будзе запоўнена і стане несапраўднай. _transient дадзеныя.

Горш за ўсё тое, што частыя праверкі на няправільныя функцыі павялічваюць нагрузку на PHP.

Даследаванні паказваюць, што больш за [колькасць] вэб-сайтаў WordPress 30% страт прадукцыйнасціГэта звязана з несапраўднымі або лішнімі CRON-заданнямі (крыніца: Тэхнічны аналіз часопіса Smashing).

Рэалізацыя кода для аўтаматычнага выдалення несапраўдных задач

Рашэнне насамрэч даволі элегантнае.

Сакрэты паскарэння працы вэб-сайта 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. Перабіраць усе запланаваныя задачы:пас _get_cron_array() Атрымаць бягучыя зарэгістраваныя задачы.
  2. Праверце, ці эфектыўны кручок:калі $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-задач ліквідуе гэты шум, падтрымліваючы чыстую працу сістэмы.

У лічбавую эпоху эфектыўнасць — гэта жыццё.

Прадукцыйнасць вэб-сайта залежыць не толькі ад яго класных інтэрфейсных эфектаў, але і ад стараннага кіравання бэкэндам.

Авалоданне гэтым кодам дасць вам магчымасць WordPress самастойна аднаўляцца.

Як некалі казаў Гегель: «Свабода — гэта не рабіць усё, што хочаш, а самаабмежаванне».

Толькі навучыўшы свой WordPress самадысцыпліне, вы зможаце сапраўды раскрыць сілу свабоды.

Блог Hope Chen Weiliang ( https://www.chenweiliang.com/ Артыкул «Сакрэты паскарэння працы вэб-сайта WordPress: аўтаматычнае выдаленне няправільных запланаваных задач CRON», размешчаны тут, можа быць вам карысным.

Запрашаем падзяліцца спасылкай на гэты артыкул:https://www.chenweiliang.com/cwl-33971.html

Каб адкрыць больш схаваных хітрасцяў🔑, далучайцеся да нашага канала ў Telegram!

Падзяліцеся і пастаўце лайкі, калі вам гэта падабаецца! Вашы акцыі і лайкі - наша пастаянная матывацыя!

 

发表 评论

Ваш электронны адрас не будзе апублікаваны. 必填 项 已 用 * Этыкетка

Каталог артыкулаў
Пракрутка да пачатку