我将插件的一些数据与外部API同步。这个同步进程应该每分钟启动一次。因此,我使用以下代码来完成该操作:
if ( ! get_transient( 'my_task_sync_method' ) ) {
set_transient( 'my_task_sync_method', true, 1 * MINUTE_IN_SECONDS );
my_task_sync_method();
}目前,我在插件初始代码中运行此代码。我知道这是一种解决办法,而不是暂时的正常用例,但这是迄今为止我找到的最好的解决方案。
这很好,但有时当我重新加载后端页面(例如仪表板)时,我会得到一些我已经生成的定制post管理页面的部分。当我在运行同步进程时重新加载页面时,似乎就会发生这种情况。这件事很难调整。但是马比有人知道这样的问题并能帮助我吗?如果有更好的解决方案来进行同步,如果您告诉我更好的方法,我会很高兴的。
发布于 2018-02-23 16:00:01
您的同步函数可能会尝试做得太多,特别是当您需要联系外部资源时。
正确的方法是当信息超过一分钟时获取信息,而不是每时每刻。这样,如果同步失败,您肯定不会陷入困境。
我个人讨厌瞬变,因为他们的设计,不可靠。您应该使用一个选项,在该选项中存储下一次更新,并检查该时间是否已过,可能会在该选项中存储一个额外的“标志”,该“标志”指示何时更新正在进行,以防止双重更新。
额外注意:虽然1分钟的间隔大部分时间应该是可以的,但我的直觉是它太短了。Web服务器和web软件的设计并不能非常准确地说明它们的时间安排,而且您的站点不能拥有超过一分钟的陈旧信息的情况听起来很荒谬。假设您在每次同步上做一些额外的DB写操作,您将对您的服务器功能进行征税,以获取一些可能实际上不需要的内容。
https://wordpress.stackexchange.com/questions/294946
复制相似问题