分页会减轻服务器负载吗?(理论)


11

我想知道分页背后的原因是什么?是否使用它是因为它从技术上限制了每页返回的行数,从而减轻了服务器的负担?

我想做一些没有分页的事情,但是鉴于我是新手(我是业余爱好者),开始怀疑它在技术上是否可行。


您是否真的要等待您的浏览器下载并呈现成千上万行的问题,这些问题在您单击此站点上的“问题”时会不关心?
杰里米,

3
对人类而言,分页比对DB更为重要。
Malfist 2011年

Answers:


10

分页有多种原因,减少服务器负载只是其中之一。但是,斯蒂芬·奥尔Stephen Orr)提出了一个正确的观点-您仍然需要首先查找数据量。你必须确保查询是快速,不会过分加载你的服务器。

其他原因包括:

  • 一次性减少返回给客户端的数据量。如果您有大量数据,这可能会花费大量时间并占用大量内存。
  • 用户通常对所有数据不感兴趣,而对最新数据(例如)感兴趣。通过仅返回几页数据,您不会获得用户永远看不到的数据。

在这两种情况下,您都不想让用户等待-要么等待他们将不查看的数据,要么等待所有可能处理一个数据的数据。


2
+1我在写类似的东西,但是你太快了。我要补充一点,即也将分页内容用作(显示)更多添加项的一种方式。
yannis,2011年

您也可以创建页面而不必知道有多少页面,只要知道数据多于当前页面的容量就足够了。
Carlo Kuip

3

它取决于实现方式。

它可以加快页面的渲染速度,但不一定会减轻服务器的负载。大多数幼稚的分页算法都需要先执行查询,以确定应该有多少页,然后再次查询以获得“分页”结果集。


大多数幼稚的分页算法需要首先执行查询来确定应该有多少页:但是在常见情况下,计数查询和获取分页结果查询对数据库的累积压力几乎总是比获取所有查询少得多。 (具有结构良好的关系数据库)
yannis 2011年

@YannisRizos,绝对。我刚刚看到了它的阴暗面,它的结构数据库结构异常糟糕(我们的许多查询联接7或8个不同的表以获得结果)。
史蒂夫·希尔

@YannisRizos:定义“对数据库的压力”。您仍然需要跨两个查询。您是在查询中进行分页(超级选择一个行数),还是在另一层中缓存结果?有太多变量可以说明存在过多的db压力。我认为在事务意义上正确完成操作(您是否允许脏读/页面中的计数不一致?)会增加db“压力” /加载,但简化了编程。
JE队列

@Xepoch我没有说太多压力,只是说任何计数加上有限的选择<全选。而且这仅适用于结构良好的关系数据库上的常见方案。
yannis 2011年

1

分页所带来的最大价值是通过以下方式提高了应用程序的速度:

1-限制客户端和服务器之间传输的数据。如果用户正在寻找10个客户,那么没有读取100万个客户的意义。

2-通过仅检索适合用户视图的行来显着提高查询性能。如果用户将查看前10个客户,则没有读取100万个客户的意义。

3-分页有助于提供更多新数据。如果您的应用程序显示许多数据行,并且您的应用程序域需要对显示的表中的数据行进行大量更新,则很有可能在您转到页面列表的第20页时,某些行上的数据已经改变了。考虑一个读取股票价格或酒店可用客房的应用程序。检索旧数据并将其放置在客户端上是没有用的。

分页是一种策略,将过滤与您对特定场景下最终用户的需求(预期将导致一个很好的设计来满足此需求)结合起来,将极大地增强应用程序,特别是当多个用户访问数据库时同时。

分页并不总是琐碎的程序。在某些情况下,这很简单,但有时编写起来却非常复杂,因此执行SQL查询时不执行全表扫描。当然,这取决于您的索引,过滤条件和Where语句。


-4

在我看来,分页是所有过早优化的源泉。无需分页即可编写您的网站绝对可以。

如果在发布后发现在一次调用中加载了太多数据,或者由于忙于加载不需要的数据而用户不得不等待他们想要的信息,请继续编写Ajax解决方案仅当人们向下滚动时才加载页面(请参阅:Twitter,Tumblr,Google图片搜索)。

编辑:以上第二段的假设是,常见的回答是“但如果您知道要在某个时候分页,您最好尽早进行,而不是浪费时间开发要扔的东西远。”

作为所有过早优化的母亲,我认为分页是UX的噩梦,并且有更好的解决方案,不需要在整个页面的顶部进行太多额外的开发。

尽管投票人数众多,但我还是保留这个答案,因为我坚持这种观点,即使这可能不是我最好的写作。


5
我强烈不同意这种说法,分页并不是为了优化数据库,而是要向人们提供可管理的大块数据。如果全部都在一页上,您能阅读《哈利·波特》吗?如果“税法典”全部在一页上,您是否可以报税?
Malfist 2011年

@Malfist:您无法在一页上处理这些事情的唯一原因是页面本身太大。这不是网页中的问题。因此,我所引用的网站找到了更好的分页解决方案,而Lolcats当前拥有将近2000页的页面,以任何明智的方式都无法分页。但是,这是您的不赞成,请按照原样使用。
pdr

1
@Malfist:另外,如果这些块不转移,将它们拆分为可管理的块就足够了。如果我阅读了第1-4页,那么我想下次再读第5页。但是在很多情况下,分页的网站是项目列表,最近的是第一个。因此,当我稍后返回第5页时,实际上显示的是上次访问时的第3页的一半和第4页的一半,因为列表中有一个全新的1.5页。
pdr

2
-1我也很不同意这一点。我什至不知道从哪里开始解释原因。
Craige

@Craige:好吧,那好。我当然不能对此提出很多争论。
pdr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.