Ускоряем админку WordPress — отключаем агрессивную проверки обновлений
Это, на мой взгляд, обязательная фитча для всех сайтов на WordPress, как принято говорить - маст хэв. Почему? Потому что проверка обновлений должна идти фоном и никак иначе, за очень редким исключением! Давайте разберемся что к чему.
Как полностью отключить авто-обновления для ядра, тем, плагинов, читайте в отдельной статье: Авто-обновления в WordPress.
Причина тормозов в админке
Думаю каждый, кто более-менее связан с WordPress замечал периодические тормоза при заходе на любую страницу админки: в консоль админки, на страницу плагинов или тем (здесь особенно!). Эти тормоза встречаются периодически: то медленно, то быстро.
Происходит так из-за проверок WordPress о новых версиях: ядра, плагинов, тем и переводов.
Дело в том, что для проверки новых версий при генерации страницы PHP отправляет HTTP запрос, а точнее 3 запроса: ядро, темы, плагины. Если есть платные плагины, то на каждый плагин обычно еще один свой запрос. При HTTP запросе в PHP генерация страницы зависает пока каждый запрос не получит результат, а на каждый запрос уходит в среднем 0,3 - 1 секунда. Вот и получается, что страница виснет на 2-4 секунды.
Частота этих проверок на разных страницах админки такая:
- На странице
Консоль Обновления
- раз в минуту. - На странице
Плагины
илиВнешний вид > Темы
- раз в час. - На любой странице в админке - раз в 12 часов (два раза в день).
Кроме того, эти проверки срабатывают во время события 'admin_init', а значит при AJAX запросах. Несмотря на то что это происходит раз в пол дня, все же неприятно когда кто-то будет ловить AJAX запрос с задержкой в 3 секунды... Кроме того, такое поведение для AJAX запросов работает и во фронтэнде, а это уже совсем нехорошо...
Фронт и админка
Во фронте все проверки висят на кроне и от туда срабатывают в фоновом режиме. Когда пользователь заходит на сайт WP запускает крон (с определенной периодичностью), причем делает это без задержек (фоном). Если в крон-задаче наступило время проверки, то она происходит... Во фронте все хорошо и ничего не тормозит.
В админке происходит «агрессивная проверка» не фоном, а прям при генерации страницы. Сделано так для того, чтобы при заходе в админку мы сразу, в меню видели что есть обновления. Если была бы фоновая проверка, то чтобы увидеть наличие обновлений нам нужно было бы зайти на страницу еще раз. Если сравнивать этот минус с тормозами, я однозначно выбираю его!
Тормоза и объектное кэширование
Если на сайте установлен плагин объектного кэширования, то ситуация с тормозами только усугубляется. Потому что когда используется объектное кэширование, то нет никаких временных опций в базе данных - все пишется в кэш, и стоит очистить этот кэш, очищается все, включая данные о последней проверке новых версий: ядра, плагинов, тем и переводов.
Таким образом, стоит очистить объектный кэш и мы обязательно ловим 3-x секундную задержку на любой странице админки. В процессе разработки порой часто приходится очищать объектный кэш и каждый раз после очистки страница грузиться по 3-4 секунды
Решение (отключаем тормоза)
Чтобы избавится от тормозов, но при этом не отключать проверку обновлений совсем. Вставьте следующий код в файл темы functions.php, ну или куда вы там вставляете такие коды...
Этот код полностью отключает «агрессивную» проверку обновлений в админке. Но не трогает проверку обновлений по крону. Также, если нужно проверить наличие новых версий прямо сейчас, то заходим на страницу Консоль > Обновления
- там «агрессивная» проверка не отключается и срабатывает каждую минуту...
Вот так все и должно работать, на мой взгляд, из коробки. Но WP что-то слишком «услужил» с обновлениями... Возможно это изменят в будущем, хотя я сомневаюсь... Ну а пока:
GitHub<?php /** * Disable forced checking for new WP, plugins, and theme versions in the admin panel, * so that it doesn't slow down when you haven't visited for a long time and then visit... * All checks will happen unnoticed through cron or when you visit the "Dashboard > Updates" page. * * @see https://wp-kama.ru/filecode/wp-includes/update.php * @author Kama (https://wp-kama.ru) * @version 1.1 */ if( is_admin() ){ // disable update checks when entering the admin panel... remove_action( 'admin_init', '_maybe_update_core' ); remove_action( 'admin_init', '_maybe_update_plugins' ); remove_action( 'admin_init', '_maybe_update_themes' ); // disable update checks when entering a special page in the admin panel... remove_action( 'load-plugins.php', 'wp_update_plugins' ); remove_action( 'load-themes.php', 'wp_update_themes' ); // leave forced checking when entering the updates page... //remove_action( 'load-update-core.php', 'wp_update_plugins' ); //remove_action( 'load-update-core.php', 'wp_update_themes' ); // leave forced checking when entering the "Update/Install Plugin" or "Update/Install Theme" page - it doesn't interfere... //remove_action( 'load-update.php', 'wp_update_plugins' ); //remove_action( 'load-update.php', 'wp_update_themes' ); // don't touch the cron event, it will be used to check for updates - everything is fine here! //remove_action( 'wp_version_check', 'wp_version_check' ); //remove_action( 'wp_update_plugins', 'wp_update_plugins' ); //remove_action( 'wp_update_themes', 'wp_update_themes' ); /** * disable the need to update the browser in the console - we always use top browsers! * this check happens once a week... * @see https://wp-kama.ru/function/wp_check_browser_version */ add_filter( 'pre_site_transient_browser_'. md5( $_SERVER['HTTP_USER_AGENT'] ), '__return_empty_array' ); }
Плагин
По коду из этой статьи был создан плагин: Disable Aggressive Updates.