Когда следует использовать 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. Более подробно это описано в следующих статьях:

  1. Асинхронные функции в Wordpress
  2. Используйте WP Cron для запуска Асинхронные фоновые задачи в WordPress при сохранении после публикации или Обновить

Я надеялся получить некоторые мнения от других разработчиков об этом шаблоне.

Моя проблема с этим подходом заключается в том, что а) если у вас низкий трафик на вашем сайте, он может никогда не запуститься из-за того, как работает WP Cron. И б) если вы делаете действительно сложные вещи, для завершения которых требуется, скажем, 10 секунд, не задержит ли это рендеринг страницы в следующий раз, когда WP Cron запускается при загрузке страницы? Так что мои действия администратора действительно быстры, и я закрываю браузер, но следующий пользователь, который посещает сайт, получает дополнительное время загрузки 10 секунд? Значит, все, что я делаю, это передаю время ожидания кому-то другому? В некоторых случаях это мог быть даже я сам.

Итак, мой вывод состоял в том, чтобы отключить WP Cron и запланировать вызов wp-cron.php?doing_cron через crontab. Но разве это не заблокирует мой сайт, пока он работает?

Author: fuxia, 2014-04-16

1 answers

...если у вас низкий трафик на вашем сайте, он может никогда не запуститься из-за того, как работает WP Cron

В вашем конкретном примере он всегда должен срабатывать. Поскольку save_post запускается непосредственно перед перенаправлением браузера, последующий запрос обратно на экран редактирования вызовет расписание cron.

...не приведет ли это к задержке отображения страницы при следующем запуске WP Cron при загрузке страницы?

Нет. Если вы проверите spawn_cron(), вы увидите, что он запускает параллель запрос на обработку расписания.

Из кодекса:

Отправьте запрос на запуск cron через HTTP-запрос, который не останавливает загрузку страницы. Будет запускаться не чаще одного раза в 60 секунд.

 1
Author: TheDeadMedic, 2014-04-16 13:27:35