【问题标题】:Pagination: Server Side or Client Side?分页:服务器端还是客户端?
【发布时间】:2010-09-29 07:16:26
【问题描述】:

处理分页的最佳方法是什么?服务器端还是使用 javascript 动态执行?

我正在开发一个大量使用 ajax 并动态提取数据的项目,所以我一直在开发一个使用 dom 的 javascript 分页系统 - 但我开始认为这样做会更好处理所有服务器端。

大家的想法是什么?

【问题讨论】:

    标签: javascript pagination client-side server-side


    【解决方案1】:

    正确的答案取决于您的优先级和要分页的数据集的大小。

    服务器端分页最适合:

    • 大型数据集
    • 更快的初始页面加载
    • 不运行 javascript 的用户的可访问性

    客户端分页最适合:

    • 小数据集
    • 更快的后续页面加载

    因此,如果您主要出于美观原因进行分页,则在客户端处理它更有意义。如果您要通过分页来减少初始加载时间,那么服务器端是显而易见的选择。

    当然,如果您使用 Ajax 加载后续页面,客户端在后续页面加载时间方面的优势就会减弱。

    【讨论】:

    • 什么是小数据现在是个问题
    • @Pushpendra 足够小,您实际上可以将其全部发送给用户,并期望他们的浏览器能够根据需要过滤和排序数据。所以测试你的目标平台很重要。
    • 我要补充一点,如果期望用户会查看第一页然后继续前进(就像在搜索结果的用例中一样),那么服务器端分页将减少资源密集度。跨度>
    【解决方案2】:

    在客户端执行此操作将使您的用户首先下载所有可能不需要的数据,并且会消除分页的主要好处。

    对于此类 AJAX 应用,最好的方法是让 AJAX 调用服务器以获取下一页并使用客户端脚本添加更新当前页面。

    【讨论】:

    • 如果加载时间很重要,最好在每次加载页面时预加载下一页。这将导致零加载时间,除非有人非常快速地转发两页。
    【解决方案3】:

    如果您有大页面和大量页面,您最好通过 AJAX 从服务器请求分块页面。因此,让服务器根据您的请求 URL 进行分页。

    您还可以预取用户可能会查看的接下来的几个页面,以使界面看起来更具响应性。

    如果只有几页,提前抓取所有页面并在客户端分页可能是更好的选择。

    【讨论】:

      【解决方案4】:

      即使数据量很小,最好的选择还是服务器端分页。如果您的 Web 应用程序进一步扩展,您以后不必担心。

      对于更大的数据量,答案是显而易见的。

      【讨论】:

        【解决方案5】:

        服务器端 - 向客户端发送当前视图的足够内容。

        【讨论】:

          【解决方案6】:

          在实际存在限制的情况下,我会在服务器端进行分页,以节省与发送数据相关的所有资源。此外,服务器需要保护自己免受恶意/故障客户端请求巨大页面的影响。

          一旦代码顺利运行,我会向客户端添加“智能”以获取“下一个”和“上一个”页面并将其保存在内存中。当用户翻到下一页时,更新你的缓存。

          如果客户端软件执行这种页面缓存,请务必考虑数据老化的速度(可能会发生变化)以及是否应检查缓存的数据页面是否仍然有效。如果它的时间超过 2 分钟,可能会重新请求它。也许里面有一个“脏”的标志。类似的东西。希望你觉得这很有帮助。 :)

          【讨论】:

            【解决方案7】:

            您的意思是您的 JavaScript 将所有数据都保存在内存中,并且一次显示一页吗?或者它使用 AJAX 根据需要从服务器下载每个页面?

            如果是后者,您可能还需要考虑排序。如果您使用 JavaScript 进行排序,则一次只能对一页进行排序,这没有多大意义。所以你的排序应该在服务器上完成。

            【讨论】:

              【解决方案8】:

              我更喜欢服务器端分页。但是,在实现它时,您需要确保正确优化 SQL。例如,我相信 MySQL,如果你使用 LIMIT 选项它不使用索引,所以你需要重写你的 sql 以正确使用索引。

              G-Man

              【讨论】:

                【解决方案9】:

                这里要指出的另一件事是,您很少会局限于简单地通过原始数据集进行分页。

                您可能需要在您正在显示的一列或多列中搜索某些术语,然后对几列进行排序,然后让用户能够翻阅这个过滤后的数据集。

                在这种情况下,您可能需要看看是否有这种逻辑搜索和/或排序客户端或服务器端会更好。

                要考虑的另一件事是,Amazon 的云搜索 API 为您提供了一些非常强大的搜索能力,如果您碰巧将数据托管在那里,您显然希望允许云搜索为您处理搜索和排序。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-11-04
                  • 2018-06-06
                  • 1970-01-01
                  • 2020-07-18
                  • 2011-04-30
                  相关资源
                  最近更新 更多