繁体   English   中英

在JavaScript中处理大型(12K +行)数组

[英]Processing a large (12K+ rows) array in JavaScript

这个项目的要求很奇怪,但我希望得到一些见解......

我有一个包含大约12,000行数据的CSV文件,大约12-15列。 我正在将其转换为JSON数组并通过JSONP加载它(必须运行客户端)。 在数据集上进行任何类型的查询都需要几秒钟才能返回较小的过滤数据集。 我目前正在使用JLINQ进行过滤,但我实际上只是循环遍历数组并根据条件返回一个较小的集合。

webdb或indexeddb是否允许我以更快的速度进行此过滤? 你知道的那些教程/文章解决了这个特殊类型的问题吗?

http://square.github.com/crossfilter/ (不再维护,请参阅https://github.com/crossfilter/crossfilter获取更新的分支。)

Crossfilter是一个JavaScript库,用于在浏览器中探索大型多变量数据集。 Crossfilter支持与协调视图的极快(<30ms)交互,即使数据集包含一百万或更多记录......

这让我想起John Resig写的一篇关于字典查找的文章(真正的字典,而不是编程结构)。

http://ejohn.org/blog/dictionary-lookups-in-javascript/

他从服务器端实现开始,然后在客户端解决方案上工作。 它应该为您提供一些改进现在正在改进的方法的想法:

  • 高速缓存
  • 本地存储
  • 内存注意事项

如果您需要在对其应用某些转换之前将整个数据对象加载到内存中,我会将IndexedDB和WebSQL排除在混合之外,因为它们通常会增加复杂性并降低应用程序的性能。

对于这种类型的过滤,像Crossfilter这样的库将会有很长的路要走。

IndexedDB和WebSQL可以在过滤方面发挥作用,当您不需要加载或不想将整个数据集加载到内存中时。 这些数据库最适合用于索引行(WebSQL)和属性(IndexedDB)的能力。

在浏览器数据库中,您可以一次将数据流式传输到数据库中一条记录,然后光标通过它,一次一条记录。 过滤的好处是,这意味着可以将数据保留在“磁盘”(Chrome中的.leveldb和FF的.sqlite数据库)中,并将不必要的记录过滤掉,作为预过滤步骤或过滤器本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM