Когда следует использовать wp для планирования одного события для асинхронных/неблокирующих процессов?
В последнее время я заметил эту закономерность в некоторых плагинах:
<?php
function MY_CRON(){
wp_schedule_single_event(time(), 'MY_ACTION');
}
add_action('save_post', 'MY_CRON');
function MY_FUNCTION(){
// YOUR CODE HERE
}
add_action('MY_ACTION', 'MY_FUNCTION');
Это позволит избежать запуска сложных функций на крючках, которые вы хотите выполнять быстро. Это может быть "save_post", вызов через AJAX или, как в моем случае, новый заказ в Woocommerce. Более подробно это описано в следующих статьях:
- Асинхронные функции в Wordpress
- Используйте WP Cron для запуска Асинхронные фоновые задачи в WordPress при сохранении после публикации или Обновить
Я надеялся получить некоторые мнения от других разработчиков об этом шаблоне.
Моя проблема с этим подходом заключается в том, что а) если у вас низкий трафик на вашем сайте, он может никогда не запуститься из-за того, как работает WP Cron. И б) если вы делаете действительно сложные вещи, для завершения которых требуется, скажем, 10 секунд, не задержит ли это рендеринг страницы в следующий раз, когда WP Cron запускается при загрузке страницы? Так что мои действия администратора действительно быстры, и я закрываю браузер, но следующий пользователь, который посещает сайт, получает дополнительное время загрузки 10 секунд? Значит, все, что я делаю, это передаю время ожидания кому-то другому? В некоторых случаях это мог быть даже я сам.
Итак, мой вывод состоял в том, чтобы отключить WP Cron и запланировать вызов wp-cron.php?doing_cron через crontab. Но разве это не заблокирует мой сайт, пока он работает?
1 answers
...если у вас низкий трафик на вашем сайте, он может никогда не запуститься из-за того, как работает WP Cron
В вашем конкретном примере он всегда должен срабатывать. Поскольку save_post
запускается непосредственно перед перенаправлением браузера, последующий запрос обратно на экран редактирования вызовет расписание cron.
...не приведет ли это к задержке отображения страницы при следующем запуске WP Cron при загрузке страницы?
Нет. Если вы проверите spawn_cron()
, вы увидите, что он запускает параллель запрос на обработку расписания.
Из кодекса:
Отправьте запрос на запуск cron через HTTP-запрос, который не останавливает загрузку страницы. Будет запускаться не чаще одного раза в 60 секунд.