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 - отключаем проверки обновлений 17 комментариев
  • popay6 cайт: clubwp.ru

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

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

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

Ваш комментарий