WordPress использует собственную систему планировщика задач — WP Cron, которая запускается при каждом посещении сайта. Однако при высоком трафике или на слабых хостингах это может приводить к избыточной нагрузке и задержкам в выполнении задач. В этой статье мы рассмотрим, как настроить отложенный запуск WP Cron без использования плагинов, повысив производительность и надежность сайта.
Что такое WP Cron и почему его нужно оптимизировать
WP Cron — это имитация системного планировщика, который запускается при каждом запросе к сайту. Это удобно, но при большом количестве посетителей задачи могут выполняться слишком часто или с задержками, если трафик низкий. Кроме того, это может создавать дополнительную нагрузку на сервер.
Оптимизация WP Cron позволяет:
- Запускать задачи с фиксированным интервалом вместо при каждом запросе.
- Снизить нагрузку на сервер и ускорить обработку запросов пользователей.
- Обеспечить стабильное выполнение отложенных задач, даже при низком трафике.
Отключение стандартного WP Cron и настройка системного cron
Первый шаг — отключить запуск WP Cron при каждом запросе. Для этого в wp-config.php добавьте следующую строку:
define('DISABLE_WP_CRON', true);Теперь WP Cron не будет запускаться автоматически. Для запуска задач нужно настроить системный cron на сервере, который будет вызывать WP Cron с нужным интервалом.
Для этого добавьте в системный планировщик (например, crontab в Linux) следующую команду:
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Эта команда вызывает скрипт WP Cron каждую минуту. Вы можете изменить интервал в зависимости от задач и трафика.
Пример настройки crontab на Linux
Чтобы отредактировать crontab, выполните в терминале:
crontab -eДобавьте строку из предыдущего примера и сохраните файл. После этого системный cron будет запускать WP Cron регулярно, а не при каждом запросе посетителей.
Создание пользовательских отложенных задач с примером кода
WP Cron позволяет создавать свои задачи и запускать их с нужным интервалом. Рассмотрим пример функции для wpdo, которая регистрирует и выполняет отложенную задачу.
Добавьте в файл functions.php или в свой плагин следующий код:
function wpdo_schedule_custom_event() {
if (!wp_next_scheduled('wpdo_custom_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'wpdo_custom_cron_hook');
}
}
add_action('wp', 'wpdo_schedule_custom_event');
function wpdo_do_this_hourly() {
// Ваш код, который должен выполняться каждый час
error_log('WPDO: Выполнение отложенной задачи');
}
add_action('wpdo_custom_cron_hook', 'wpdo_do_this_hourly');В этом примере мы создаем задачу, которая запускается каждый час. В функцию wpdo_do_this_hourly можно добавить любой код, например, очистку кеша, отправку писем или обновление данных.
Добавление собственного интервала времени
Если стандартных интервалов (hourly, daily) недостаточно, можно добавить свой:
function wpdo_custom_cron_schedules($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpdo_custom_cron_schedules');После этого можно использовать интервал 'every_five_minutes' в функции планирования.
Отложенный запуск задач с минимальной нагрузкой
Чтобы минимизировать нагрузку на сервер при выполнении задач, рекомендуется:
- Не запускать тяжелые задачи слишком часто.
- Разбивать большие задачи на части и запускать их по очереди.
- Использовать transient API для кеширования промежуточных результатов.
Например, если нужно обработать большое количество записей, делайте это по 50 штук за один запуск, а оставшуюся часть — при следующем вызове.
Полезные плагины для управления WP Cron
Хотя в этой статье мы не используем плагины для настройки cron, полезно знать о них для мониторинга и отладки:
- WP Crontrol — позволяет просматривать и управлять задачами WP Cron из админки.
- Clearfy Pro — содержит инструменты оптимизации, в том числе работу с cron и кешем.
Для надежной работы сайта лучше комбинировать системный cron и инструменты мониторинга.
Резюме и советы
Отложенный запуск WP Cron через системный cron — это простой и эффективный способ оптимизировать работу сайта и избежать лишней нагрузки. Важно грамотно планировать задачи, использовать кастомные интервалы и разбивать большие операции. Сочетание этих подходов позволит обеспечить стабильность и производительность вашего WordPress-сайта.