我正在使用angular-ui-grid(http://ui-grid.info/)显示表格数据。总体而言,这非常慢,因此我们决定使用ag-grid(https://www.ag-grid.com/)。对于常规大小的数据集,它的性能要好得多,并且要处理得更好。
但是,现在我们正在处理一些大小为100 cols x 10,000行(〜1M单元)的表格数据,并且网格的性能似乎很慢。
我想知道是否有人使用了hypergrid(https://fin-hypergrid.github.io/core/2.0.2/)-似乎可以“解决”大型列数x大行的问题,在他们的演示中似乎在大型数据集上要快得多(几乎一个数量级)。
我没有尝试过您提到的任何示例库,但是也许我可以解释为什么fin-hypergrid
最突出。我的意见主要基于我的JavaScript知识以及这种东西在后面的工作方式。
我可能应该从react-virtualized
和开始ag-grid
:
react-virtualized
和ag-grid
是他们将在尽可能平稳的方式这些变化的算法。ag-grid
在我看来,这是受此问题影响最大的一个,因为您实际上会看到一些尚未完成渲染的元素,并且在滚动太快时会遇到严重的延迟。
react-virtualized
另一方面,以最流畅的方式执行其算法的出色工作。这可能是DOM操纵类别中可用的最佳库,尽管它仍然受到操纵DOM太快而造成延迟的问题的困扰,尽管只有在涉及大量数据时才能看到。
以下是fin-hypergrid
出色的原因:
fin-hypergrid
是它根本不执行DOM操作,因此您已经避免了因添加和删除内容太快而导致的问题,因为它使用了<canvas>
fin-hypergrid
还仅显示用户看到的数据,并动态删除不可见的内容。它还预先添加以实现平滑的滚动感觉,因此没有显示仍在渲染的项目。fin-hypergrid
在滚动算法方面也做得非常好,以实现尽可能平滑的方式,因此没有抖动或延迟。现在这并不意味着hypergrid
一切都很好,它也有一些缺点:
fin-hypergrid
是使用HTML5 Canvas制作的,因此样式设置会因为不接受CSS而成为真正的难题。您需要手动设置样式。<select>
,单选按钮,复选框等,这将是实施的真正难题。如果您尝试实施类似的操作,请谨慎操作。总结一下,我可能建议react-virtualized
改用,因为它可以提供上述最平滑的滚动fin-hypergrid
。如果您愿意忽略的缺点fin-hypergrid
,那fin-hypergrid
是最好的选择。
更新:
由于我们讨论了JS / CSS,因此这些表的画布实现。虽然这个人是不是主要是JS表库,但在一个框架,我应该提到的最后一个可能的竞争者Google Sheets
可能已经使用它被称为d3.js。
d3.js
具有画布的速度和功能,同时保留HTML结构,这意味着可以使用CSS对其进行样式设置!d3.js
该d3.js
讨论的唯一缺点是:
d3.js
。Google Sheets
那是。但是他们不共享代码。d3.js
虽然有很多东西可以帮助我们更快但不是那么快地学习,但是很难学习。如果您想通过CSS样式功能提高Canvas的速度,那么d3.js
关键是要学习它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句