1

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

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

4

3 回答 3

10

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

向你的 webapp 添加一个搜索表单,让最终用户搜索他感兴趣的内容,并且只显示 N 个第一个搜索结果,就像 Google 所做的那样。

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

于 2012-11-29T12:50:15.057 回答
4

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

只是例如快速谷歌示例演示

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

于 2012-11-29T12:53:43.070 回答
1

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

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

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

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

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

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

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

于 2020-04-14T10:04:34.470 回答