【问题标题】:PHP heavy task scheduling [duplicate]PHP繁重的任务调度[重复]
【发布时间】: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 实践。

标签: php wordpress


【解决方案1】:

如果您的托管服务器兼容,您可以尝试 cronjob。也许您可以制作一个特殊的缓存 php 脚本并将其放在位于您主页的 iframe 上。如果您的插件页面在您的索引页面之后,它会起作用

【讨论】:

  • 这是一个问题,因为 cron 作业依赖于托管,我正在寻找一个跨平台的解决方案
  • 好的,然后在 iframe 上制作自己的 cronjob。它不会是有效的主页加载时间,只是在浏览器上会有一条指示消息“等待 xxxx.php 响应”,访问者导航到另一个页面,你的 iframed php 页面脚本继续工作。这将是一个糟糕的解决方案,你可以开发这个想法。也许您的插件缓存页面可以控制是否更改了外国人页面内容。如果它改变了你的缓存器,否则就不行了。也许您可以将此 iframe 放在插件索引页面上。 iframe 不会影响加载此页面,您可以说“请等待内容正在加载”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多