Отключаем проверки обновлений 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 секунды.

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

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

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

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

/**
* Отключаем принудительную проверку новых версий WP, плагинов и темы в админке,
* чтобы она не тормозила, когда долго не заходил и зашел...
* Все проверки будут происходить незаметно через крон или при заходе на страницу: "Консоль > Обновления".
*
* @see http://vseowordpress.com.ua/filecode/wp-includes/update.php
* @author Vseoword (http://vseowordpress.com.ua)
* @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 http://vseowordpress.com.ua/function/wp_check_browser_version
*/
add_filter( ‘pre_site_transient_browser_’. md5( $_SERVER[‘HTTP_USER_AGENT’] ), ‘__return_true’ );
}

//