簡體   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