初始方案: 我在Wordpress中有PHP脚本,它存储MySQL DB中多步骤表单帖子的条目,并使用PHPMailer将表单条目通过电子邮件发送到多个电子邮件(从数据库中检索并在数组中设置)。
问题: 表单发布需要一些时间才能完成,因为它将条目存储在数据库中并将电子邮件发送到多个地址。由于表单帖子需要花费很多时间(超过1分钟),因此用户将退出表单,从而影响潜在客户转换。
建议的设计: 在表单发布之后,只需将表单的条目存储在数据库表中,以便完成表单提交,使用计划任务或cron作业在循环中调度电子邮件提交功能。 我想这可以减少表单提交时间,因为电子邮件提交只是一个后台进程。
如果这是一个好的设计,我可以使用cron作业吗?我在考虑使用 https://www.sitepoint.com/introducing-cron/ 但不确定如何在表单提交完成后实际触发此操作。 在下面的代码片段中,我有一个函数来处理表单提交后发生的事情,但只有在send_notification完成/返回后,表单提交才完成。
add_action('gform_after_submission_19', 'send_custom_notification', 10, 2);
function send_custom_notification($entry, $form) {
send_notification("form_submission", $form, $entry);
/*Is there a way to dispatch send_notification as a schedule task
or cron job so that form submission is finished but notification
is background process?*/
}
相反,我需要一种方法在表单完成后触发send_notification。可以在函数完成后调度或触发cron作业或计划任务吗?
答案 0 :(得分:1)
您使用asynchronous function calls或processing queues。 Laravel有这样的事情built-in。
我推荐第二种方法,因为它提供了许多好处,如可扩展性和可管理性。
基本思路是,您将命令发送到队列中并基本上忘记它。您有在其他地方运行的队列作业工作人员将从队列中获取作业并对其进行处理。这样,您的原始进程 - 将作业放入队列的进程 - 可以继续处理,而无需等待这些任务完成。