改进WP_QUERY在随机帖子被排序时的性能

时间:2016-02-22 作者:Johan

在我问了一个关于query\\u posts代码的问题后,我进行了一个新的查询。。。你们觉得不太好,所以我决定改变。

我做了这个:

$page = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; 
$rand = new WP_Query("showposts=10&orderby=rand&paged=$page"); 
while($rand->have_posts()) : $rand->the_post();
我的问题是:我该如何改进这一点?

使用数组不是更好吗?那么相同的代码,是否有数组?

就像这样:

$rand = new WP_Query( array(
    \'showposts\' => \'10\',
    \'orderby\' => rand
) );
这会让我的表现更好吗?

我读到一些关于添加的内容:

\'update_post_meta_cache\' => false
如果不使用术语,则改进性能。我的问题:到底什么是术语?他们是想用这个来表示标签和/或类别吗?

Edit:

function random_posts( $query ) {
    if ( $query->is_home() && !$query->is_paged() && $query->is_main_query() ) {
        $query->set( \'orderby\', \'rand\' );
    }
}
如果我用这个怎么办?我必须更改WP\\U查询还是必须删除它?我不明白什么pre_get_posts 确实如此。

1 个回复
SO网友:Tom J Nowell

orderby rand的问题是,在大多数设置中,数据库会将所有帖子加载到内存中,然后随机排序,然后返回您要求的内容。正是这种加载到内存的方式使得查询速度非常慢/非常昂贵

当然,术语是单独的类别和标记,其中类别是一种分类法,“开发”类别是该分类法中的术语。

最后,您的初始代码片段暗示您正在使用页面模板或试图覆盖页面上显示的内容。这很糟糕,因为它会丢弃主查询并启动第二个查询。第一次查询的开销仍然存在,但它被丢弃了,因此这是浪费时间。这就是为什么query_posts 被认为是有害的,用自定义WP_Query 循环并不能解决这个问题。考虑使用pre_get_posts 而是截取主查询并对其进行更改

相关推荐

浏览器刷新时删除数据库条目,AJAX PHP jQuery

我有一个表单,在通过ajax提交表单时更新数据库表中的列。一切都很好,数据库表列可以获取信息,但一旦刷新浏览器,信息就会从数据库中删除。如果meta\\u值不存在,但meta\\u值也在提交表单时创建的数据库中,则PHP将执行数据库更新。我希望信息保留在数据库中,直到或除非meta\\u值被删除或不存在。任何见解都将不胜感激。PHPadd_action(\'wp_ajax_hide_this\', \'hide_this_by_id\'); add_action(\'wp_ajax_nopriv_