WP Cron和WordPress AJAX一样快吗?

时间:2015-11-18 作者:Kyle

我有一个关于在WordPress中执行一项非常长的资源密集型任务的问题。下面是场景。

我有一个插件,允许用户运行一个需要很长时间的任务,一旦完成,就会将结果返回给用户。

我做的第一件事是通过WordPress AJAX函数运行任务。由于该网站已锁定该用户,因此此操作不起作用。这意味着如果任务已启动,则无法从该用户加载其他页面。我能够让它在其他浏览者不会被锁定的情况下工作,但最初启动任务的人仍然被锁定。此外,这还创建了一个依赖关系,因为当AJAX任务运行时,用户无法关闭该窗口,因为这将关闭连接并停止任务。

我尝试提出的第二个解决方案是通过wp\\u schedule\\u single\\u event()函数创建一个事件。我能够开发这个,一切都很好,但现在通过wp cron运行的任务比AJAX方法花费的时间要长很多,大约是10倍。此外,我将这个大任务分解为许多小任务,当第一个任务通过wp cron运行时,它会过时一段时间。然后,一旦第一个任务最终完成,它就能够再次顺利运行,直到发生了什么事情,并且过时为止。此过程将重复,直到完成所有子任务。我不确定wp cron函数中是否内置了节流功能,但我看不到与AJAX函数相同的速度。

总的来说,我的主要问题是如何创建一个运行速度与AJAX任务一样快的wp cron任务?

这里有一个关于堆栈溢出的类似问题供参考。

https://stackoverflow.com/questions/33508639/is-it-possible-to-perform-a-background-php-server-task-from-an-ajax-call-that-wi/33508941?noredirect=1#comment54802107_33508941

1 个回复
SO网友:Mateusz Hajdziony

正如@Milo所说,WP-Cron只有在有人向WP请求某些内容时才会被触发,也就是访问任何WordPress页面(我还没有查到确切的细节,所以我不知道AJAX请求是否会触发预定事件)。

您说过您已经将主要任务分解为较小的任务—我认为您应该采用这种方法并将其实现到AJAX方法中。您应该将主任务分解为尽可能多的较小子任务,并将它们链接起来。第一个子任务完成后,发送另一个AJAX请求以执行下一个子任务。等等,直到一切都完成。您甚至不必依赖JavaScript来正确地链接事件—您只需在AJAX响应中为下一个直列子任务传递操作名称,并指示脚本只发送AJAX请求,其中包含从服务器返回的操作名称,直到服务器表示一切都已完成。这种类似MVC的方法将为您节省一些维护代码的时间-JS不必知道子任务的划分结构,它只会从服务器请求数据,直到服务器说一切都完成了。

对于用户体验来说,这也是最好的方法,因为您可以在每个子任务响应到达后持续向用户显示任务更新。更新用户在时间密集型任务中的进度是至关重要的。您甚至可以将子任务的进度/结果存储在数据库或cookie中,以便用户即使在意外导航出页面后也可以继续处理!

相关推荐

当调用Get_Current_User_id()时,跨域AJAX请求总是返回0;

我目前使用localhost,当我想测试对web服务器的ajax请求时,函数get\\u current\\u user\\u id()总是返回0。然而,当我从我的网站发出ajax请求时,它是有效的。在浏览器中打开文件还会返回当前wp\\U用户id。我向其发出请求的文件:<?php require_once $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\'; echo get_current_user_id(); 我的身体里有co