javascript - 替代 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 文件较小时,这可以正常工作。但是,加载时间明显变长了。我最初打算用加载屏幕来掩盖它,但我怀疑有一种更快的方法可以有效地加载我的数据。
所以我考虑了几个选项:
- 我可以尝试使用csv-stream或fast-csv进行 CSV 流式传输,但我还没有看到如何通过这种方法获取数据的示例。
- 我可以将 CSV 文件转换为 JSON 文件,然后运行这些文件,但不知道它的速度有什么好处。
- 我可以对 CSV 文件进行正则表达式文本搜索,但同样,我不知道不断打开大小为 5MB 且不断增长的文件是否会使其更快。
其中哪一个会更快?此外,关于选项 (1),一个简单的查找函数(类似于电子表格软件中的 INDEX(MATCH()))是什么样的?
目前,我的其他函数(未显示)找到 l2Ranks 的指定列,获取它的 ID 号(l2Ranks 和 l2Sents 中的第 0 项),然后返回与同一指定列和包含该行的行匹配的 l2Sents 项身份证号。那里的减速为零。
解决方案
推荐阅读
- usb - 如何查询UVC相机的序列号?
- python - 为特定条件创建颜色编码图(python)
- python - 使用 sqlalchemy 查询和 pandas 数据帧时如何最小化代码
- node.js - 如何获取包含某个字符串的所有结果(在帖子中有更多解释)
- c# - 如何“正确”将 C# 属性转换为 C++?
- java - Maven 将依赖项写入我的项目的根文件夹。我怎样才能解决这个问题?
- django - 如何将这些循环转换为精细优化的 Django 查询
- django - IntegrityError:“is_approved”列中的空值违反非空约束
- mongodb - MongoDB计算所有出生在不同地点的独特人
- php - 编辑 php 文件,但只显示字符串之间的数据