我们的 Utilty 有一个单表,它有 1000 万到 5000 万行,可能有一种情况我们需要在单页 html 客户端页面中显示 5000 万行,为了在浏览器中显示行,我们在 UI 中使用 jQuery。
要检索行,我们使用 Hibernate 并使用 Spring for MVC。我正在寻找检索行并在 UI 中显示的最佳实践。我应该在 Hibernate 中检索大量数千行还是两千行并缓冲到 Web 客户端,还是有最佳实践?
我们的 Utilty 有一个单表,它有 1000 万到 5000 万行,可能有一种情况我们需要在单页 html 客户端页面中显示 5000 万行,为了在浏览器中显示行,我们在 UI 中使用 jQuery。
要检索行,我们使用 Hibernate 并使用 Spring for MVC。我正在寻找检索行并在 UI 中显示的最佳实践。我应该在 Hibernate 中检索大量数千行还是两千行并缓冲到 Web 客户端,还是有最佳实践?
最好的做法是不要这样做。它会爆炸浏览器内存和渲染引擎,并且会花费太多时间来加载。
向你的 webapp 添加一个搜索表单,让最终用户搜索他感兴趣的内容,并且只显示 N 个第一个搜索结果,就像 Google 所做的那样。
没有人能够在不搜索的情况下对 5000 万行做任何有意义的事情。
在应用程序中处理大量数据必须通过虚拟化来完成。虽然用户确实会被数百万条记录所淹没,但他们不能用它做任何事情并不是完全正确的,也不能说如此大量的数据是深不可测的。
在实践中,根据您正在做的事情,您会注意到这个限制会出现在您身上,只有数千条记录。坦率地说,这是非常少的数据。以数据为中心的应用程序只需要一种不同的方法,如果它们要在浏览器中工作并表现良好的话。
我们这样做的方式非常简单,但并不是那么简单。
它有助于确定固定高度,因为您需要知道可滚动容器的最大高度。然后,您将在任何给定时刻可见的记录子集呈现到此容器中,并相应地定位它们(基于滚动事件)。有或多或少有效的方法可以做到这一点。
最终目标保持不变。您基本上需要剔除屏幕上不直接可见的所有内容,这样浏览器就不会为应用程序响应而支付内存和布局逻辑成本。这是游戏开发中的常见做法,只有现在屏幕上可见的世界才会在任何特定时刻出现。所以这就是你需要做的让大量的东西表现良好。
在浏览器的上下文中,任何归因于内存使用和布局/渲染成本的东西都需要消失,如果它不是绝对重要的话。
您还可以错开和涂抹重新计算,这样您就不会承担导致应用程序在每次小更新时降级的任何成本。如果应用程序保持响应,用户可以等待 1 秒。