GET_POST_META减慢页面加载速度(在插件中)

时间:2014-06-03 作者:Heeties

我一直在做这个项目,我需要为每个事件加载事件(自定义帖子类型)和一大堆元数据。问题是,当添加越来越多的事件时,页面加载时间越来越长。

一开始只有几个事件,这根本不是问题,但现在当系统页面中有100多个事件时,加载会花费6秒,这太长了。

我正在做的示例:显示系统中的所有事件(以下所有操作都在插件中完成)我使用get\\u posts加载所有事件并指定自定义post类型。我循环浏览所有帖子,并使用get_post_meta 在一次通话中。

在测试瓶颈所在的位置时,我发现get_post_meta 执行时间从4.5秒下降到14毫秒。我还测试了如果我像这样单独加载每个元数据会发生什么:get_post_meta($post->ID, "meta_value", true);

如果我有一个只需要几个meta值的视图,这会加快加载过程,可以减少20%的加载时间,但当我几乎需要全部加载时间时,加载时间没有变化。

我还注意到get_post_custom 在这种情况下没有真正的帮助。

在网上浏览(这里,博客等)之后,人们指出get_posts, 所有元数据都会自动检索和缓存。但从执行时间和处理的查询量来看,这似乎不是真的。

有没有办法通过php/mysql进一步加快速度?

我想的一件事是:是否有一种方法可以在一次调用中获取所有帖子和每个帖子的元数据。但我没有幸在网上找到任何可以帮助我实现这一目标的东西。

1 个回复
SO网友:thomascharbit

您应该使用对象缓存,它肯定会加快get\\u post\\u元查询的速度,因为在执行初始WP\\u查询(get\\u posts)时会缓存这些查询。

我建议使用APC对象缓存后端使用APC缓存进行测试:https://wordpress.org/plugins/apc/

只需将文件放在您的wp内容文件夹中,并确保您有可用的APC扩展名。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post