一个用于获取帖子及其分类术语的查询

时间:2014-07-28 作者:Jeff

我正在构建一个帖子和分类的地图,以便稍后进行更深入的处理。

现在我正在用查询帖子WP_Query 并对每一个进行迭代以获得它们的分类术语,然后将所有这些术语转储到一个数组中以供以后使用。

我知道,从性能和“最佳标准”的角度来看,这是不对的。我不想在循环中进行数据库调用,我更愿意在第一次查询中用帖子加载所有帖子术语。

这可能吗?怎样

1 个回复
SO网友:Adam Friedman

根据用户Otto, 谁提供a good explanatory answera similar question, 您可以多次安全地调用wp\\u get\\u post\\u terms(),因为Wordpress的内部查询缓存系统在循环开始之前已启动,后续对wp\\u get\\u post\\u terms()的调用将命中缓存而不是查询:

对于标准WP\\U查询(和主查询),Post meta信息会自动缓存在内存中,除非您使用update\\u Post\\u meta\\u cache参数明确告诉它不要这样做。

因此,您不应该为此编写自己的查询。

元缓存如何用于普通查询:

如果WP\\u查询的update\\u post\\u meta\\u cache参数未设置为false,则从DB检索帖子后,将调用update\\u post\\u caches函数,该函数将调用update\\u postmeta\\u cache。

update\\u postmeta\\u cache函数是update\\u meta\\u cache的包装器,它本质上调用了一个简单的SELECT,其中包含检索到的所有帖子的ID。这将使它获得查询中所有帖子的所有postmeta,并将该数据保存在对象缓存中(使用wp\\u cache\\u add)。

然而,他的解释并没有提供太多的代码来证明它,也没有提供任何实际的页面查询分析。所以,为了确定,我点燃了Query Monitor plugin 并在我自己的归档页面上运行了一些测试。这表明我调用wp\\u get\\u object\\u terms()(总是由wp\\u get\\u post\\u terms()和实际的查询调用方激发)85次,这似乎是一个很高的数字。然而,每次通话大约需要0.0005秒。所有人都说总时间约为0.05秒。我对页面上所有400-500个查询的总查询时间(我使用的是有点臃肿的Themify杂志主题)是0.36秒。

所以我想教训是(假设我臃肿的主题没有做像中断WP的内部缓存这样疯狂的事情):由WP\\u get\\u post\\u terms()运行的简单查询是如此无足轻重,以至于如果只启动几次,它们的性能几乎没有下降。然而,如果您渴望优化,Wordpress似乎没有像用户Otto所指出的那样预先为这些数据启动任何缓存。

结束

相关推荐

Performance on WPMS

我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?