Ускоряем сайт на WordPress, отключая HeartBeat API
Не иссякнет поток полезных советов пользователям популярнейшей в мире бесплатной CMS. Именно потому, что популярна и потому, что у нее есть особенности, о которых важно помнить. Ранее мы говорили о том, как:
1. Правильно настроить кэширование на сайте.
2. Уменьшить нагрузку при работе с консолью.
Сегодня мы немного расширим вторую тему и отключим очень ресурсоемкий и не всем нужный механизм WordPress под названием HeartBeat API.
HeartBeat API — функционал WordPress, который обеспечивает такие вещи, как:
- Автосохранение;
- Блокировка записи или страницы для других редакторов сайта, пока запись или страницу редактирует один человек;
- Обновление информации о том, что пользователь всё ещё находится в административной части (консоли).
Делает он это, поддерживая связь между вашим браузером (где вы редактируете сайт) и сервером (на котором сайт хранится).
На деле это выражается в постоянных запросах с интервалом в 15-30 секунд (в зависимости от установленной версии) к одному конкретному файлу admin-ajax.php практически с любой страницы административной панели. Ситуация усугубляется, если вы предпочитаете держать открытыми сразу несколько вкладок консоли: запросы отправляются автономно из каждой вкладки. По сути, HeartBeat API является самым ресурсоёмким из всех стандартных механизмов WordPress.
Эту функцию мы сегодня и отключим. Отключить HeartBeat API для вашего сайта на WordPress рекомендуется, если:
- В целом вашим сайтам на аккаунте хватает ресурсов, значительные превышения происходят только во время работы в консоли;
- Сайт редактируете только лично вы (то есть у сайта 1 редактор, а не несколько).
Внимание! Данное решение подойдет не всем сайтам. Это зависит от установленной на сайте темы, плагинов и индивидуальных настроек сайта. Вы можете опробовать его и, если оно окажется несовместимо с каким-либо из элементов сайта или отразится на важной для вас функции сайта, вы всегда можете включить HeartBeat API, вернув прежние настройки.
Как выключить HeartBeat API
Для этого необходимо внести изменения в файл functions.php внутри папки с текущей активной темой (шаблоном) сайта. Это можно сделать в файловом менеджере или через FTP.
Путь к файлу functions.php выглядит так: /путь_до_корня_сайта/wp-content/themes/имя_темы/functions.php.
Допишите в самом начале файла после тега <?php с новой строки следующие строчки:
add_action('init', 'stop_heartbeat', 1);
function stop_heartbeat() { wp_deregister_script('heartbeat'); }
Эти строчки отключают HeartBeat для всего сайта.
Плагин HeartBeat Control
Есть и менее радикальный вариант решения, чем полное отключение HeartBeat API. Оно обеспечивается специальным плагином HeartBeat Control. Установите его, активируйте и перейдите к настройкам («Инструменты» -> «HeartBeat Control»). В настройках вы можете выбрать следующие параметры:
1. Отключить ли HeartBeat для всего сайта или разрешить его использование только для отдельных его разделов, например, для страницы редактирования и публикации записей в административной панели.
2. Частота запросов к файлу admin-ajax.php. По умолчанию она может быть 15 секунд — измените это значение, например, до 60 секунд, и тем самым сократите расход ресурсов на данные запросы на целых 75%!
О чем важно помнить
- Отключив HeartBeat API, мы отключили функцию автосохранения. Периодически сохраняйте редактируемые страницы и записи (по мере реальной необходимости).
- Поскольку отключение HeartBeat API производится на уровне темы (шаблона) сайта, то, как только вы измените тему (шаблон) оформления, HeartBeat API снова будет работать. Процедуру отключения необходимо будет повторять для каждой новой темы, которую вы начинаете использовать на сайте.
- То же самое касается и обновления текущей темы: после обновления процедуру отключения требуется повторить.
Желаем вам приятной работы!
Важно учитывать, что код вставлять не в самом начале, а после тега <php :))))
Павел, да, спасибо за замечание, мы это и имели в виду, и теперь поправили в тексте для большей очевидности)
хотел спросить на счётчики это не влияет? Время пребывания пользователя на странице будет учитываться яндекс метрикой например?
Нет, на работе счетчиков это не скажется, всё будет учитываться по-прежнему.
К сожалению при добавлении материала, перестает генерироваться URL. По этому нельзя его изменить. Очень жаль, потому как иногда приходится на сайте обновлять по 20-50 материалов за 1-2 часа и это вешает сайт из-за превышения нагрузки. Данных хук бы очень помог.