使用WP瞬变来保存插件的外部数据是最好的/正确的方式吗?

时间:2016-02-21 作者:flomei

我正在开发一个插件,它依赖于不时获取的外部数据。为了加快速度,我想缓存接收到的数据,每隔10或15分钟刷新一次。

这不会有什么大问题,因为外部服务器也只会以类似的间隔刷新数据。

但我认为,一方面,它将从外部服务器上获得相当大的负载,同时也会提高本地站点的速度,因为数据已经存在。

一开始我很确定WP瞬变是最好的方式,但现在我不确定了。我一直看到很多插件使用自己的表来存储任何数据,我想知道是否应该通过Transients API将外部数据推送到_options-表或专用表结构是否更适合这种情况。

Is there some objective, measurable point in using a table over Transients or vice versa?

更新1:数据是具有区域上下文的类似XML的结构化数据。因此,从理论上讲,用户可能需要获取几十个数据集,但这可能不会发生在很多数据集上。此外,服务器端还可以获取“组合”数据集,如“城市数据集”和“区域数据集”。

(如果不清楚,请询问我。)

2 个回复
SO网友:Doug Wollison

如果您正在获取的数据只是一个实例或最多几个实例,那么Transients API应该完成这项工作;请记住,它还为您处理自动过期。

如果数据可能是无限数量(或至少是中大型)的实例,特别是如果可能有稍微复杂的方法来查找要检索的正确条目(除了ID之外),那么建议使用自定义表。

话虽如此,还有第三种可能的选择:文件系统。您可以将序列化/jsonified的数据存储在wp content的子文件夹中的文件中。当然,前提是所讨论的数据实际上是公开的,不需要受到任何保护。

SO网友:Pieter Goosen

每隔10或15分钟刷新一次

创建瞬变非常昂贵,因此每10到15分钟创建并刷新一次瞬变确实是个坏主意。瞬态仅在保持时有用small pieces 在很长一段时间内的数据。我一直认为,不应该一天多次刷新和重新创建瞬态。我倾向于将我的过渡期设置为30天,只有在发生一些事情时才刷新,比如发布新帖子或更新术语。

瞬态也不是为了保存大量数据,比如存储100个post对象。您可以检查my answer here 为了检查我是如何使用瞬态的,我只存储了一个排序后的post ID数组,而不是我的completewp_posts 桌子虽然由于暂时的原因,每页多调用一个db,但由于排序过程,我节省了大量内存使用。

我真的会考虑在您的情况下使用一个新表来处理这些外部数据。然而,这需要您编写自己的CRUD进程来存储和处理数据。您也可以构建自己的缓存系统来缓存外部数据,但这完全取决于您自己。

在开始创建自己的表之前,您应该阅读@tosho\'s answer 针对以下问题

相关推荐

PHP致命错误:第123行对/wp-includes/cache.php中的NULL调用成员函数get()

我很难让插件正常工作,并在调试中发现了此错误。每次加载管理中的页面时发生的日志:PHP Fatal error: Call to a member function get() on null in /xxx/wp-includes/cache.php on line 123 这个错误显然与插件本身没有直接关系,但有人向我建议,它可能与插件本身有关。作为Wordpress的核心文件,我想知道这个错误有多严重。我不确定是什么导致了这个错误,或者它的确切含义是什么。。。我遇到问题的插件是C