WordPress中有没有等同于Drupal的批处理API的东西?

时间:2014-10-16 作者:David Barratt

我想知道是否有类似于Drupal的Batch API 在WordPress中?

基本上,API允许您注册批处理请求,Drupal将反复调用您的函数(使用Ajax请求),直到批处理完成。因此,如果您需要对1000000篇帖子执行复杂的更新,您可以在没有PHP超时或内存不足的情况下批量执行。(你只需告诉Drupal你已经走了多远,它就会为用户更新进度条,等等。)

我需要在WordPress中执行类似的操作(在WordPress后端执行大量批处理,而不使用命令行)。您将如何实现这一点?

3 个回复
SO网友:Tom J Nowell

不,没有这样的API,但如果您想要,可以:

在WP Core Trac上打开一张罚单,但如果需要删除、创建或更新100万篇帖子或类似规模的内容,通过前端进行操作也不是一件好事,即使使用AJAX驱动的进度条也是如此。

第三方插件确实实现了类似的功能,但不是以一种超级通用的方式。没有“通用批处理ajax请求”插件。缩略图再生器插件就是一个例子。

将来,最好使用即将推出的RESTAPI来处理您的请求。然后,您可以发出javascript请求,成批或逐1更改帖子,并实现进度条。

作为一名与托管WordPress主机合作的开发人员,我怀疑WP Engine会对此感到满意,你的客户也不会满意(100万次更新帖子的请求,100万次点击,这是一项使用点击来确定定价的服务的大量点击)。因此,您的建议可能会非常昂贵,按$$$计算,每1000次点击中就有1次超龄定价,我怀疑您的客户是否会满意

因此,除非您在WP Engine enterprise软件包中获得数百万点击率,否则您可能会:

生意兴隆!40万点击率,60万/1000=第一次删除的100万美元为600美元+每增加100万美元为1千美元,+流量/1000专业!10万点击率,90万/1000=第一次删除的100万美元为900美元+每增加100万美元为1千美元,+流量/1000个人!25k点击率,975000/1000=第一次删除的100万美元为900美元,每增加100万美元为1k美元,+流量/1000,其他托管WordPress服务的成本可能或多或少,但这仍然是一个冒险的提议,尤其是如果第一次没有正常工作,您需要重复这个过程

但是,即使你忽略了定价,这些请求也是很多的,而且请求需要时间。即使他们只花了很小的时间,这也是合情合理的。您的进度条将等待一段时间。。。

我要做的是,最好在本地下拉站点,使用WP CLI运行命令,然后上载新数据库。你有一个带有代码的git repo,你有SFTP访问权,你有数据库的PHPMyAdmin,这是可以做到的。即使是大多数售价1美元的共享主机也提供了这些设施。

当您可以将SSH访问拉到完全由您控制的环境中时,您不需要SSH访问,下载和上载速度将比成千上万的AJAX请求快得多。

作为奖励,您可以免费获得实时内容的最新副本!

SO网友:Mark Kaplun

我不知道你为什么想做那样的事。让我们假设到服务器的ping时间是100ms(我的通常更糟),这意味着使用简单的AJAX发送、等待响应然后再次发送,1M请求将需要100k秒——比一天多。如果你每次都能发送10封邮件,你会把时间减少到3个小时左右,但你基本上会对网站做一个DOS。

在AJAX中,我能看到的唯一一点是让人观察正在发生的事情并处理意外事件,但是当这个过程需要一个多小时时,没有人会想使用这种方法。

处理这种需求的正确方法是使用wordpress cron。执行一个批处理并立即安排一个事件以运行下一个批处理。如果您正确地编写了这个过程,那么在没有任何不合理的php执行或内存需求的情况下,速度会快得多。

SO网友:Philip

实际上,从WordPress 5.6开始,就有这样一个API。查看这篇2020年11月的博客文章,讨论REST API Batch Framework.

结束