WordPress как на ладони
wordpress jino

Ускоряем админку WordPress — отключаем проверки обновлений

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

Причина тормозов в админке

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

Дело в том, что для проверки новых версий при генерации страницы PHP отправляет HTTP запрос, а точнее 3 запроса: ядро, темы, плагины... Если есть платные плагины, то на каждый плагин обычно еще один свой запрос... При HTTP запросе в PHP генерация страницы зависает пока каждый запрос не получит результат, а на каждый запрос уходит в среднем 0,5 - 1 секунд. Вот и получается, что страница виснет на 3-4 секунды.

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

  • На странице Консоль > Обновления - раз в минуту.
  • На странице Плагины или Внешний вид > Темы - раз в час.
  • На любой странице в админке - раз в 12 часов.

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

Фронт и админка

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

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

Тормоза и объектное кэширование

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

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

Решение (отключаем тормоза)

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

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

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

/**
 * Отключаем принудительную проверку новых версий WP, плагинов и темы в админке,
 * чтобы она не тормозила, когда долго не заходил и зашел...
 * Все проверки будут происходить незаметно через крон или при заходе на страницу: "Консоль > Обновления".
 *
 * @see https://wp-kama.ru/filecode/wp-includes/update.php
 * @author Kama (https://wp-kama.ru)
 * @version 1.0
 */
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' );

	// внутренняя страница админки "Update/Install Plugin" или "Update/Install Theme" - оставим не мешает...
	//remove_action( 'load-update.php', 'wp_update_plugins' );
	//remove_action( 'load-update.php', 'wp_update_themes' );

	// событие крона не трогаем, через него будет проверяться наличие обновлений - тут все отлично!
	//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_transient_browser_'. md5( $_SERVER['HTTP_USER_AGENT'] ), '__return_true' );
}

Отключение обновлений

Про то как отключать все типы автоматического обновления: ядра, тем, плагинов читайте в отдельной статье: Авто-обновления в WordPress

В конце

Хотелось бы услышать ваши мысли на этот счет:

  • Вы замечали такие тормоза?
  • Они вас раздражают?
  • Стоит ли сделать плагин для всего этого?
  • Как вы решаете эту проблему?
Ускоряем админку WordPress - отключаем проверки обновлений 15 комментариев
  • в админ панели пофиг на тормоза. Главное что бы во фронте небыло тормозов. Ну это конечно моё мнение

    2
  • Я тоже никогда не заморачивался на этот счёт. В админке это не так важно, другое дело, что фронтэнд должен быть максимально оптимизирован.

    PS Нет ли статьи посвященной крону WP? Есть ли смысл через стандартный крон инициировать его, допустим, ночью, или раз в час? Если да, то как?

    • Kama4711

      Кого его? Обновления во фронте и так по крону и никак не влияет на скорость загрузки... Там фоном запускается крон...

  • petrozavodsky708 cайт: alkoweb.ru

    ну так стоит настроить крон на сервере и можно не задумываться о запросах обновлений
    , все верно ?

    • Kama4711

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

  • Очень дельная статья! С отзывами выше, типа "пофиг на админку", я не согласен т.к., у меня, например, есть несколько сайтов на WP, в админке которого работает постоянно 3-4 человека, в таком случаи отключение всего ненужного будет кстати.

    2
  • Айк cайт: 1informer.com

    Я поставил плагин Disable All WordPress Updates и админка летает !

    • Kama4711

      И об обновлениях ты ничего не знаешь больше. В плагине дыру закрыли, а ты ни сном, ни духом, в WP баг был, ну и ладно... Это не хорошо, не стоит так делать, кроме редких случаев...

      2
  • В дополнении к этому, было бы уместно написать функции для отключения:

    1. Обновления ядра
    2. Обновления тем
    3. Обновления плагинов.

    Можете прям здесь и написать? smile

  • То я думаю, че админ панель так тупит. Добавил ваш код в function.php и действительно отклик стал быстрее. Спасибо)

    PS. Исправьте ошибку в подзаголовке "Тормоза и объектное кэширвоание" smile

  • Михаил ATs cайт: mihalica.ru @

    Здравствуйте!!
    Полезная вещь!! ...и я думал об этих "обновлениях" уже давно... Но и но)
    А - хвать, сделали Вы уже...
    Особливо кому-то это будет полезно:

    remove_action( 'admin_init', '_maybe_update_themes' );

    иным - иное...

    Восклицания одного из предыдущих ораторов, мол, "ему по барабану" - мне показались по меньшей мере странными)) smile

  • popay7 cайт: clubwp.ru

    Отлично, работать стало заметно быстрее. Раньше тоже думал, что в админке скорость не важна. Но сильно ошибался, зачем загружать сервер ненужными запросами. Спасибо за инструкцию.

    2
  • Не знаю, стоит ли делать для этого плагин, код небольшой и понятный. И чрезвычайно полезный. Работать стало значительно быстрее.

Здравствуйте, !

Ваш комментарий
Предпросмотр