我需要使用 JavaScript 在网格中向用户呈现大量数据行(即数百万行)。
用户不应一次查看页面或仅查看有限数量的数据。
相反,似乎所有数据都可用。
不是一次性下载所有数据,而是在用户访问时下载小块(即通过滚动网格)。
行不会通过这个前端编辑,所以只读网格是可以接受的。
对于这种无缝分页,存在哪些用 JavaScript 编写的数据网格?
我需要使用 JavaScript 在网格中向用户呈现大量数据行(即数百万行)。
用户不应一次查看页面或仅查看有限数量的数据。
相反,似乎所有数据都可用。
不是一次性下载所有数据,而是在用户访问时下载小块(即通过滚动网格)。
行不会通过这个前端编辑,所以只读网格是可以接受的。
对于这种无缝分页,存在哪些用 JavaScript 编写的数据网格?
(免责声明:我是 SlickGrid 的作者)
更新 现在已经在SlickGrid 中实现了。
请参阅http://github.com/mleibman/SlickGrid/issues#issue/22以获取有关使 SlickGrid 处理更多行的持续讨论。
问题是 SlickGrid 没有虚拟化滚动条本身——可滚动区域的高度设置为所有行的总高度。当用户滚动时,行仍在添加和删除,但滚动本身是由浏览器完成的。这使它非常快而流畅(众所周知,滚动事件非常慢)。需要注意的是,浏览器的 CSS 引擎中存在限制元素潜在高度的错误/限制。对于 IE,这恰好是 0x123456 或 1193046 像素。对于其他浏览器,它更高。
“largenum-fix”分支中有一个实验性的解决方法,通过将“页面”设置为 1M 像素高度填充可滚动区域,然后在这些页面中使用相对定位,显着提高了该限制。由于 CSS 引擎中的高度限制似乎与实际布局引擎中的不同,并且明显低于实际布局引擎中的高度限制,因此这为我们提供了更高的上限。
我仍在寻找一种方法来获得无限数量的行,而不会放弃 SlickGrid 目前相对于其他实现的性能优势。
Rudiger,你能详细说明你是如何解决这个问题的吗?
https://github.com/mleibman/SlickGrid/wiki
“ SlickGrid 利用虚拟渲染使您能够轻松处理数十万个项目,而不会降低性能。事实上,处理 10 行与 100'000 行的网格之间的性能没有区别。 ”
一些亮点:
它是免费的(MIT 许可证)。它使用jQuery。
我认为最好的网格如下:
我最好的 3 个选项是 jqGrid、jqxGrid 和 DataTables。它们可以处理数千行并支持虚拟化。
我并不是要开始一场火焰战争,但假设你的研究人员是人类,你并不像你想象的那样了解他们。仅仅因为他们拥有数PB 的数据并不能使他们能够以任何有意义的方式查看数百万条记录。他们可能会说他们想要查看数百万条记录,但这太愚蠢了。让最聪明的研究人员做一些基本的数学计算:假设他们花 1 秒钟查看每条记录。按照这个速度,这将需要 1000000 秒,这将超过六周(每周工作 40 小时,不吃东西或上厕所)。
他们(或您)真的认为一个人(看着网格的人)可以集中注意力吗?他们真的在那一秒内完成了很多工作,还是他们(更有可能)过滤掉了不想要的东西?我怀疑在查看“合理大小”的子集后,他们可以向您描述一个过滤器,该过滤器会自动过滤掉这些记录。
正如paxdiablo、Sleeper Smith 和Lasse V Karlsen 也暗示的那样,您(和他们)还没有仔细考虑这些要求。从好的方面来说,既然您已经找到了 SlickGrid,我相信对这些过滤器的需求立即变得显而易见。
我可以非常肯定地说,您真的不需要向用户显示数百万行数据。
世界上没有用户能够理解或管理该数据集,因此即使您在技术上设法实现了它,您也无法为该用户解决任何已知问题。
相反,我将集中在为什么用户想要看到的数据。用户不想看数据只是为了看数据,通常会有一个问题被问到。如果您专注于回答这些问题,那么您将更接近解决实际问题的方法。