使用JavaScript在客户端上处理大型数据集(100K)有哪些更好的解决方案。特别是,如果您具有多列排序和搜索功能,那么如何处理数据的获取(和预取),客户端模型绑定(用于显示)以及缓存数据。
我认为一个好的解决方案是在后台做一些深思熟虑的工作。例如,最初,如果表格显示N个项目,它可能会获取2N项目,返回用户的数据,然后在后台获取下一个2N项目(即使用户未请求此项目)。当用户进行搜索/排序更改时,它会抛出(或者甚至可能缓存初始基本情况),并执行类似的功能。
您能分享一下您所见过的最佳解决方案吗?
由于
答案 0 :(得分:3)
使用像DataTables这样的jQuery表插件:http://datatables.net/
它支持用于排序,过滤和分页的服务器端处理。它包括流水线支持以预取下一页x记录:http://www.datatables.net/examples/server_side/pipeline.html
实际上,DataTables插件有4种不同的工作方式: 1.使用HTML表,您可以发送一堆HTML,然后让客户端的所有排序,过滤和分页工作。 2.使用JavaScript数组,您可以发送一个2D数组并让它从那里创建表。 3. Ajax源 - 这不适用于您。 4.服务器端,您以JSON格式将数据发送到空表,并让DataTables从那里获取它。
答案 1 :(得分:3)
答案 2 :(得分:2)
由于您使用Ext JS对此进行了标记,如果您还没有看到它,我会指向Ext.ux.LiveGrid。源代码可用,因此您可以查看它们是如何解决此问题的。这是Ext JS世界中流行且广泛使用的扩展。
话虽如此,我个人认为(虚拟地)加载那么多数据作为用户体验是无用的。手动拉动滚动条(每个像素跳过数百条记录)对于简单地键入您想要的内容来说是一种非常低劣的体验。我更喜欢一些强大的过滤/搜索,而不是向用户呈现那么多数据。
如果你去谷歌而不是搜索框,它只是将整个互联网加载到一个长的虚拟列表中,你必须滚动才能找到你的网站......:)
答案 3 :(得分:1)
这取决于数据的使用方式。
对于大型数据集,浏览器的查找功能已足够,只返回一个直接的HTML表是有效的。加载需要一段时间,但显示器对较旧,较慢的客户端做出响应,您永远不必担心它会中断。
当客户端进行排序和搜索,并且您没有立即显示整个表时,我让服务器通过XMLHTTPRequest发送制表符分隔表,并使用list = String.split在浏览器中解析它们( ' \ n'),并通过重复调用$(' node')来更新显示内容.internalHTML =' blah'。 JS引擎可以非常有效地存储长字符串。在客户端上运行速度比显示,隐藏和重新排列DOM节点要快得多。在运行中创建和销毁新的DOM节点结果非常慢。按需将每一行拆分成字段似乎有效;我还没有尝试过那种程度的自由。
我从来没有尝试过明显的预取和放大器。背景技巧,因为这些其他方法运作良好。
答案 4 :(得分:0)
查看example数据网格和 电子表格。
对于过滤/排序/分页目的,您可能会对精选this或this comprehensive list感兴趣,作为免费替代方案。
如果只需显示巨大的列表而没有任何其他功能Handsontable就足够了。