我正在为大约 100 个项目做一个分页系统。我的问题是:
我应该只加载所有 100 个然后使用 jQuery 切换页面而不重新加载吗?或者我应该使用带有“LIMIT 5”的 MySQL 查询,然后,每次用户按下下一页或上一页时,都会启动另一个带有 LIMIT 5 的 Mysql 查询?
对于每个项目,我都必须加载缩略图,但我可以将其保存在缓存中以避免使用我的服务器带宽。
从服务器资源的角度来看,哪一个是最佳选择?
提前致谢。问候
尝试通过命令行界面直接连接到您的 MySql 实例。在一次执行 100 的查询,然后执行LIMIT 5
. 查看毫秒结果。这将告诉您哪个更有效或资源需求更少。
一次来自 MySql 的 100 条记录(取决于数据集)真的没什么。对于正确编写的查询/数据库模式,性能影响不会很明显。
也就是说,我投票赞成一次只调用你需要的结果。使用该LIMIT
子句和您的 jquery 分页方法来提高效率。
对于服务器来说,最有效的方法是一次抓取所有 100 个项目,将它们发送给客户端一次,然后让客户端页面在本地通过它们。这可能是一个昂贵的查询,但总体而言,这比让客户为每增加五个项目来回走动要便宜。
话虽如此,这是否可行是另一个话题。您不想一次将大量数据推送到您的客户端,因为它会减慢页面加载和客户端处理速度。事实上,通常希望将客户端消耗的带宽保持在最低限度。从那个 POV 来看,仅在必要时才发出具有五个结果的小型 AJAX 请求是更可取的。除非 100 个结果总体上太小以至于没有太大区别。
哪一个最适合你,你需要弄清楚。
很大程度上取决于您的查询。如果它是从精心设计的表(索引集等)中进行的简单 SELECT,那么除非您在功能非常不足的服务器上运行,否则请求 100 行和 5 行之间不会有明显差异。如果是复杂的查询,那么您可能应该限制查询的数量。
其他需要考虑的因素是加载页面需要多长时间,例如到服务器接收客户端数据的实际往返时间。我将大胆猜测您在美国或欧洲,那里的互联网速度很快,并不是整个世界都那么幸运。限制站点必须从服务器请求数据的次数是一个比服务器负载量更好的指标。
这正在迅速进入 UX,但您的用户并不关心您的服务器负载,他们也不关心这种方式是否意味着您的平均负载是 0.01 而不是 0.02。他们会关心您是否在站点的各个部分之间进行了几乎瞬时的转换。
就个人而言,我会采用“加载所有数据,然后在本地页面”的方法。还要记住,Ajax 是您的朋友,如果必须,请加载结果页面,然后请求数据。您可以将请求分成两部分:第一页和其余页面。您可以进行许多幕后调整,以使您的网站看起来非常快,这是人们注意到的。
我会说,一次加载5个并分页。我的考虑:
您还可以为用户提供每页显示 x 个项目的选项,并设置all
选项以让用户查看页面中的所有项目。随着时间的推移,您还可以根据每页要显示的 x 个项目数来监控大多数用户的偏好,然后将其作为默认设置LIMIT