【发布时间】:2014-05-09 23:59:59
【问题描述】:
我正在为 WordPress 开发一个插件,它使用 PHP 从远程网站获取数据并将其显示在网页上。 获取此数据大约需要 2-5 秒。
插件有自己的缓存系统,它会在固定的时间间隔内获取和存储新数据。
问题是任务调度程序是基于访问者的,所以如果经过足够的时间,就会有某个访问者需要等待 2-5 秒才能获取数据并缓存到数据库中。如何避免这种情况?
- 使用 Wordpress 的内置任务调度程序不是解决方案,因为它的运行方式与缓存系统相同。
- PHP Cron 作业也不是解决方案,因为它依赖于托管。
如何安排一个耗时的任务在后台运行而不影响页面加载时间? 请注意,这是一个 WordPress 插件,因此解决方案不应依赖于平台
【问题讨论】:
-
将 AJAX 调用添加到 refresh.php(或任何您想调用的名称)以在后台刷新数据?或者,如果您在网站上有 shell 访问权限:运行一个 cronjob 来获取新数据。
-
@ccKep 这听起来是个好主意。如果用户没有在页面上停留 5 秒,它仍然会在服务器上完成 AJAX 调用吗?
-
我不知道如果连接关闭或者 php(模块或调用的 cli)被允许完成,apache(或您正在使用的任何 httpd)是否会终止线程。如果它们不是:首先将您的数据加载到临时文件中,然后在脚本末尾移动它们,这样您就知道它们都是完整的。
-
@ccKep 你能详细说明一下吗?请记住,这是一个 WordPress 插件,我无法控制用户的设置。这可能是这个问题的一个很好的答案。
-
你能发布一些你当前数据获取代码的sn-ps吗? (比如打开连接、读取数据、关闭连接并保存)这样也许我可以发布一些对你有帮助的东西。不过,我对 wordpress 插件不太熟悉,因此到目前为止,我的建议是获取数据时的一般 PHP 实践。