哪个更快?一个大查询,还是几个小查询?

时间:2014-12-01 作者:coopersita

我正在开发一个应用程序,它需要通过Ajax查询随机排列的一堆帖子。类似这样:

$query = new WP_Query( array( \'posts_per_page\' => 50, \'orderby\' => \'rand\' );
由于网站的性质,人们可能需要更多的帖子(总共有250-300个帖子)。因此,如果他们需要更多的帖子,我必须再次查询,除非以后我必须发送一组我已经使用过的帖子,这样人们就不会再收到相同的帖子。

一次引入所有职位会更有效吗?还是在人们每次用完帖子时都会带来50个帖子?

或者有没有其他方法来优化搜索或数据库,这样就不会花太长时间一次提出所有问题?

Update: 我只是想澄清一下。这些都是自定义帖子,只有一个简短的简介(一句或两句话)。它们没有标签、特征图像、自定义字段或任何内容,我需要按一个类别对它们进行筛选,因此查询更像这样:

$query = new WP_Query( array ( 
    \'orderby\' => \'rand\', 
    \'posts_per_page\' => \'50\', 
    \'cat\' => \'3\', 
    \'post_type\' => \'quote\' 
) );

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

这取决于当地因素和实际使用模式。更大的查询需要更多的内存来存储数据,并且根据您使用的插件,可能需要将其处理到响应中,因此内存不足的风险更大。如果响应更大(即页面HTML更大),则需要更多的时间将页面传输到浏览器,使页面对于带宽较低的用户来说似乎加载速度较慢。

这就是为什么人们在“加载更多”和无限滚动机制上浪费时间的原因,但由于技术一直在变得更好更快,我认为不可能给出一个数字来作为决定何时必须使用AJAX而不仅仅是“很好拥有”的阈值。

用户体验视角可能是决定两者之间的最重要因素。如果这些帖子是供人阅读的文章,那么即使是20篇也可能太多了,但如果是电子表格,你可能想一次加载全部内容。

EDIT

我错过了问题最重要的部分,那就是随机性。当然,随机性和分页不能很好地结合在一起,尽管您可以强制它们这样做,但实现随机性的一个更简单的方法是查询所有帖子并存储在一个数组中,对数组进行随机化,并将其作为临时存储一个小时。

$posts = get_tranient(\'my posts\');
if (!$posts) {
  $posts = get_posts(your args);
  shuffle($posts);
  set_transient(\'my posts\',$post,HOUR_IN_SECONDS);
}
... slice the part of $posts you are interested in and work on it ...
当您在小时边界上提供页面时,这种逻辑仍然存在漏洞,但实际上,没有人会注意到每小时一次的重叠结果。从好的方面来看,这意味着您只能每小时运行一次慢速查询,而不是针对每个请求。

至于问题的更新部分,我从来没有亲自测试过,但内存大小与帖子本身的文本大小并不是线性相关的,你需要考虑与帖子相关的元数据,然后是非持久性内存缓存,它可能会使内存使用量增加一倍(应该有办法防止缓存,但我现在找不到)。

虽然您可能可以一次提供所有300条引文,但这没有什么意义,即使通过AJAX提供更多引文,因为人类不会阅读那么多“旁白”文本。

结束

相关推荐

Add CPT values to Database

我不确定这是不是件容易的事。我有一个插件,具有定制帖子类型所需的所有功能:过滤器、导航。。。我需要为这个CPT创建很多帖子(使用分类法)(需要做很多工作才能正确创建它)。所以我只想添加一次这个自定义帖子,而不是每次我想利用我在其他网站的插件。。。实现这一目标的最佳方式是什么?我是不是每次都要进行某种形式的进出口贸易?我应该利用wp\\u insert\\u post并对帖子的内容进行硬编码吗?为我的英语道歉,我不知道我是否已经解释过了。。。谢谢