Ускорение работы админ-панели WordPress: отключение агрессивных проверок обновлений

УСКОРЕНИЕ ВП-АДМИНКИ — ОТКЛЮЧЕНИЕ АГРЕССИВНЫХ ПРОВЕРОК ОБНОВЛЕНИЙ

На мой взгляд, это обязательная функция для всех сайтов на WordPress. Почему? Потому что проверки обновлений должны выполняться в фоновом режиме, а не во время работы админки, за редкими исключениями! Давайте разберемся подробнее.

ПРИЧИНЫ МЕДЛЕНИЯ В АДМИН-ПАНЕЛИ

Каждый, кто так или иначе связан с WordPress, заметил, что иногда админка подтормаживает, когда открываешь любую страницу: админ-консоль, страницы плагинов или тем (особенно это заметно здесь!). Эти медления происходят периодически: иногда все работает быстро, а иногда — медленно.

Это связано с тем, что WordPress проверяет наличие новых версий: ядра, плагинов, тем и переводов.

Чтобы проверить новые версии, PHP отправляет HTTP-запрос при генерации страницы, а на самом деле — три запроса: для ядра, темы и плагинов. Если есть платные плагины, то обычно добавляется еще один запрос для каждого из них. Когда PHP отправляет HTTP-запрос, генерация страницы «зависает», пока не будет получен ответ на каждый из запросов, а это занимает в среднем от 0.3 до 1 секунды. Таким образом, страница может «зависнуть» на 2-4 секунды.

Частота этих проверок на разных страницах админки следующая:

  • На странице «Обновления» — каждую минуту.
  • На страницах «Плагины» или «Внешний вид > Темы» — каждый час.
  • На любой странице в админ-панели — каждые 12 часов (два раза в день).

Кроме того, эти проверки срабатывают во время события admin_init, что означает, что это происходит во время AJAX-запросов. Несмотря на то, что это происходит раз в полдня, это все равно неприятно, когда кто-то получает задержку в 3 секунды...

ФРОНТЕНД И АДМИН-ПАНЕЛЬ

На фронтенде все проверки выполняются через cron и запускаются в фоновом режиме. Когда пользователь заходит на сайт, WP запускает cron (с определенной частотой) без задержек. Если пришло время для проверки в задании cron, то она осуществляется... В этом плане все хорошо, и ничего не тормозит.

В админ-панели "агрессивная проверка" происходит не в фоновом режиме, а непосредственно во время генерации страницы. Это делается для того, чтобы мы сразу видели в меню уведомление о наличии обновлений. Если бы проверка происходила в фоновом режиме, нужно было бы обновлять страницу, чтобы увидеть наличие обновлений. Если сравнить этот недостаток с тормозами, я определенно выберу тормоза!

МЕДЛЕНИЯ И КЕШ ОБЪЕКТОВ

Если на сайте установлен плагин кеширования объектов, ситуация с медлительностью только ухудшается. Дело в том, что при использовании кеширования объектов временные данные в базе данных отсутствуют, так как все записывается в кеш, и при его очистке очищаются все данные, включая информацию о последней проверке новых версий: ядра, плагинов, тем и переводов.

Таким образом, очистка кеша объектов приводит к задержке на 3 секунды на любой странице админки. Во время разработки часто требуется очищать кеш объектов, и после каждого очищения страница загружается на 3-4 секунды дольше.

РЕШЕНИЕ (ОТКЛЮЧЕНИЕ МЕДЛЕНИЙ)

Чтобы избавиться от медлений, но при этом не отключать полностью проверки обновлений, вставьте следующий код в файл functions.php вашей темы или туда, где вы обычно добавляете такие коды:

Этот код полностью отключает "агрессивные" проверки обновлений в админ-панели, но не влияет на проверки обновлений через cron. Также, если вам нужно проверить новые версии прямо сейчас, перейдите на страницу «Обновления» — там "агрессивная" проверка не отключена и осуществляется каждую минуту...

Вот как все должно работать, на мой взгляд, из коробки. Однако WP «переусердствовал» с обновлениями... Возможно, они изменят это в будущем, хотя я сомневаюсь... Но на данный момент:

<?php

/**

  • Отключить принудительные проверки новых версий WP, плагинов и тем в админ-панели,
  • чтобы не тормозить при длительном отсутствии.
  • Все проверки будут производиться незаметно через cron или при переходе на страницу "Обновления".
  • @see https://wp-kama.ru/filecode/wp-includes/update.php
  • @author Kama (https://wp-kama.ru)
  • @version 1.1
    */
    if( is_admin() ){
    // отключить проверки обновлений при входе в админ-панель...
    remove_action( 'admin_init', '_maybe_update_core' );
    remove_action( 'admin_init', '_maybe_update_plugins' );
    remove_action( 'admin_init', '_maybe_update_themes' );

    // отключить проверки обновлений при загрузке специальной страницы в админ-панели...
    remove_action( 'load-plugins.php', 'wp_update_plugins' );
    remove_action( 'load-themes.php', 'wp_update_themes' );

    // оставить принудительные проверки при переходе на страницу обновлений...
    //remove_action( 'load-update-core.php', 'wp_update_plugins' );
    //remove_action( 'load-update-core.php', 'wp_update_themes' );

    // оставить принудительные проверки при переходе на страницу "Обновление/Установка плагина" или "Обновление/Установка темы" - это не мешает...
    //remove_action( 'load-update.php', 'wp_update_plugins' );
    //remove_action( 'load-update.php', 'wp_update_themes' );

    // не трогать событие cron, оно будет использоваться для проверки обновлений - здесь все в порядке!
    //remove_action( 'wp_version_check', 'wp_version_check' );
    //remove_action( 'wp_update_plugins', 'wp_update_plugins' );
    //remove_action( 'wp_update_themes', 'wp_update_themes' );

    /**

    • Отключить необходимость обновления браузера в консоли - мы всегда используем современные браузеры!
    • эта проверка происходит раз в неделю...
    • @see https://wp-kama.ru/function/wp_check_browser_version
      */
      add_filter( 'pre_site_transientbrowser' . md5( $_SERVER['HTTP_USER_AGENT'] ?? '' ), '__return_empty_array' ); // phpcs:ignore WordPress.Security
      }

ПЛАГИН

На основе кода из этой статьи был создан плагин: Отключение агрессивных обновлений.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *