首页 > 解决方案 > 替代 CSV 数组转换以更快地获取数据

问题描述

我使用 Cordova/PhoneGap 构建了一个应用程序,并使用了一种简单的方法来获取数据。我刚刚将我的两个(制表符分隔的)CSV 文件转换为数组,然后在这些数组上运行了一些查找函数(未显示)。

    // Load the rankings.csv file and define its parameters.
var requests = new XMLHttpRequest(); // You only need one XMLHttpRequest() object.
requests.open("GET", "docs/rankings.csv", false);
requests.send(null);
var l2Ranks = [];
var jsoRanks = requests.responseText.split("\n");
for (x = 0; x < jsoRanks.length; x++) {
  l2Ranks.push(jsoRanks[x].split("\t"));
  for (y = 0; y < l2Ranks.length; y++) {
    for (z = 0; z < l2Ranks[y].length; z++) {
      l2Ranks[y][z] = Number(l2Ranks[y][z]);
    }
  }
}
// Load the sentences.csv file and define its parameters.
requests.open("GET", "docs/sentences.csv", false);
requests.send(null);
var l2Sents = [];
var jsoSents = requests.responseText.split("\n");
for (x = 0; x < jsoSents.length; x++) {
  l2Sents.push(jsoSents[x].split("\t"));
  for (y = 0; y < l2Sents.length; y++) {
    l2Sents[y][0] = Number(l2Sents[y][0]);
  }
}

现在,当 CSV 文件较小时,这可以正常工作。但是,加载时间明显变长了。我最初打算用加载屏幕来掩盖它,但我怀疑有一种更快的方法可以有效地加载我的数据。

所以我考虑了几个选项:

  1. 我可以尝试使用csv-streamfast-csv进行 CSV 流式传输,但我还没有看到如何通过这种方法获取数据的示例。
  2. 我可以将 CSV 文件转换为 JSON 文件,然后运行这些文件,但不知道它的速度有什么好处。
  3. 我可以对 CSV 文件进行正则表达式文本搜索,但同样,我不知道不断打开大小为 5MB 且不断增长的文件是否会使其更快。

其中哪一个会更快?此外,关于选项 (1),一个简单的查找函数(类似于电子表格软件中的 INDEX(MATCH()))是什么样的?

目前,我的其他函数(未显示)找到 l2Ranks 的指定列,获取它的 ID 号(l2Ranks 和 l2Sents 中的第 0 项),然后返回与同一指定列和包含该行的行匹配的 l2Sents 项身份证号。那里的减速为零。

标签: javascriptdatabasecordovacsvphonegap

解决方案


推荐阅读