在浏览器中显示 100 万行

问题描述 投票:0回答:4

我们的 Utilty 有一个表,它有 1000 万到 5000 万行,可能有一种情况我们需要在单页 html 客户端页面中显示 5000 万行,为了在浏览器中显示这些行,我们在 UI 中使用 jQuery。

为了检索行,我们使用 Hibernate 并为 MVC 使用 Spring。我正在寻找检索行并在 UI 中显示的最佳实践。我应该在 Hibernate 中检索大量的数千行或两千行并缓冲到 Web 客户端,还是有最佳实践?

database hibernate design-patterns web derby
4个回答
11
投票

最好不要这样做。它会爆炸浏览器内存和渲染引擎,并且会花费太多时间来加载。

在你的 webapp 中添加一个搜索表单,让最终用户搜索他感兴趣的内容,并且只显示前 N 个搜索结果,就像谷歌一样。

没有人能够在不搜索的情况下对 5000 万行做任何有意义的事情。


4
投票

我认为你应该使用滚动分页(当用户几乎到达页面底部时进行ajax调用并加载数据)。

例如 quick google example & demo

如果您的数据是表格形式,那么您可以使用 jQGrid


1
投票

在应用程序中处理大量数据必须通过虚拟化来完成。虽然用户确实会被数百万条记录淹没,但他们不能用它做事,也不完全是这样,如此大量的数据是深不可测的。

在实践中,根据您正在做的事情,您会注意到这个限制突然出现在您只有数千条记录的情况下。坦率地说,这是非常少的数据。如果以数据为中心的应用程序要在浏览器中运行并表现良好,则只需要一种不同的方法。

我们这样做的方式非常简单,但并不是那么简单。

确定固定高度会有所帮助,因为您需要知道可滚动容器的最大高度。然后,您将在任何给定时刻可见的记录子集呈现到此容器中,并相应地定位它们(基于滚动事件)。有或多或少有效的方法来做到这一点。

最终目标保持不变。您基本上需要剔除屏幕上不直接可见的所有内容,这样浏览器就不会为应用程序的响应支付内存和布局逻辑成本。这是游戏开发中的常见做法,只有当前在屏幕上可见的世界在任何给定时刻都存在。所以这就是你需要做的,才能让大量的东西表现良好。

在浏览器的上下文中,任何归因于内存使用和布局/渲染成本的东西都需要消失,如果它不是绝对重要的话。

您还可以错开和涂抹重新计算,这样您就不会在每次小更新时承担导致应用程序降级的任何成本。如果应用程序保持响应,用户可以等待 1 秒。


0
投票

(免责声明我是维护者) 我为此制作了一个网格,可以呈现无限行,只有 RAM 可以阻止你。它在 2 毫秒内初始化并显示任何行大小的第一行,即使在旧笔记本电脑上滚动时也能以 60fps 的速度运行。

https://github.com/gabrielpetersson/fast-grid

演示: https://fast-grid.vercel.app/

© www.soinside.com 2019 - 2024. All rights reserved.