Using get_posts vs. WP_Query

时间:2016-08-17 作者:Alan Storm

我在跑步the following PHP Code Sniffs 在一些WordPress代码上,会弹出以下警告

 352 | WARNING | get_posts is discouraged in favor of creating a new
     |         | WP_Query() so that Advanced Post Cache will cache
     |         | the query, unless you explicitly supply
     |         | suppress_filters => false.
虽然我是一名经验丰富的程序员,但我对WordPress的历史并不十分熟悉。这一警告似乎很重要,但措辞笨拙。我对几点感到困惑other answers 我已经foundsubject 似乎没有解决我的问题。

什么是“高级后期缓存”。我知道WordPress(像许多PHP应用程序一样)在几个不同的级别上进行缓存。

这个警告告诉我get_posts 不会使用缓存,但是WP_Query

这个警告是不是告诉我suppress_filters 具有WP_Query 是否将绕过高级后期缓存?或使用suppress_filters 具有get_posts 将调用缓存?还是别的什么?

还有什么suppress_filters

如果有更熟悉此事的人能给WordPress新手提供线索,我将不胜感激。我并不是在寻找一个“总是使用X,或者从不使用Y”的答案——我只是想了解每种方法的利弊。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这与WordPress直接相关,也是WordPress的结果。com VIP

在VIP,我们处理的网站每周的页面浏览量达数亿次。因此,与小型共享主机相比,在这种规模下,可能会减慢站点速度的情况要明显得多,但这仍然会影响到一个中等流量的站点,该站点在一个像样的VPS上有大约100个用户。我们还可以在代理代码到达生产之前对所有内容进行代码审查

get_posts 尤其是不缓存其结果。如果你做同样的get_posts 调用5次,它将进入数据库5次,而不是将结果保存到以后。WP_Query 不这样做,并且周围有更好的缓存,以及其他在中不可能实现的优化get_posts 因为它是如何返回完全成型的整个帖子的。

有一种方法get_posts 缓存结果,但suppress_filters 默认情况下,选项为true,但如果将其设置为false,WordPress中的缓存机制将执行其工作,结果将保存以备将来使用。

至于这些数据的存储位置,有一个名为WP_Cache. 默认情况下,这将存储您放入其中的任何内容并保留它(不要实现您自己的缓存以防止在页面加载中多次执行工作,WP已经涵盖了您!)。

然而,有一些插件提供advanced-cache.phpobject-cache.php, WP_Cache 可以使其持久化。例如batcache 将使WP_Cache 使用memcached 为了存储内容,让数据在页面加载之间保持不变,显著提高了性能。Redis/memcache等也有类似的插件

我建议你看看https://vip.wordpress.com/documentation/, 其中一些是特定于WordPress的。com VIP平台,但其他部分对性能和安全很重要。还有一个VIP扫描工具,可以检测其他内容,例如未缓存的函数使用情况。

相关推荐

Which cache is kicking

我一直在为一个从另一个开发者那里继承下来的网站而挣扎。我的主要问题是,我在模板的css文件中所做的更改并没有立即得到响应,这表明某种缓存正在发挥作用。我检查的是。这个。任何缓存指令的htaccess文件</任何可能被激活的缓存WordPress插件</主机实现的任何缓存功能</Cloudflare或任何其他CDN</我尝试了不同的浏览器和计算机,所以缓存是服务器端的您可以想象,上面的任何一项都没有启用,但我对css的更改需要几个小时才能看到。我在任何方面都不是WordPress专家