Javascript 读取和解析Node.js中数字ASCII对文件的最快方法是什么?
我正在使用Javascript 读取和解析Node.js中数字ASCII对文件的最快方法是什么?,javascript,node.js,Javascript,Node.js,我正在使用Node.js读取和解析一个成对编码数字的文件。我有这样一个文件: 1561 0506 1204 900 6060 44 [[1561,0506],[1204,900],[6060,44]] 我想把它读作一个数组,如下所示: 1561 0506 1204 900 6060 44 [[1561,0506],[1204,900],[6060,44]] 为此,我使用了readStream,将文件作为块读取,并使用本机字符串函数进行解析: fileStream.on("data",fu
Node.js
读取和解析一个成对编码数字的文件。我有这样一个文件:
1561 0506
1204 900
6060 44
[[1561,0506],[1204,900],[6060,44]]
我想把它读作一个数组,如下所示:
1561 0506
1204 900
6060 44
[[1561,0506],[1204,900],[6060,44]]
为此,我使用了readStream
,将文件作为块读取,并使用本机字符串函数进行解析:
fileStream.on("data",function(chunk){
var newLineIndex;
file = file + chunk;
while ((newLineIndex = file.indexOf("\n")) !== -1){
var spaceIndex = file.indexOf(" ");
edges.push([
Number(file.slice(0,spaceIndex)),
Number(file.slice(spaceIndex+1,newLineIndex))]);
file = file.slice(newLineIndex+1);
};
});
不过,这花了很多时间(我需要在我的机器上安装4s文件)。我看到一些原因:
我重写了算法,没有使用内置的字符串函数,而是循环,令我惊讶的是,它变得慢多了!有什么方法可以让它更快吗?警告:我还没有测试这个解决方案的性能,但它是完整的,所以应该很容易尝试 根据中的注释使用如何 使用衬里:
var fs = require('fs')
var liner = require('./liner')
var source = fs.createReadStream('mypathhere')
source.pipe(liner)
liner.on('readable', function () {
var line
while (line = liner.read()) {
var parts = line.split(" ");
edges.push([Number(parts[0]), Number(parts[1])]);
}
})
如您所见,我还将边缘数组移动为一个内联常量大小的数组,与拆分部分分开,我猜这将加快分配速度。您甚至可以尝试使用indexOf(“”)而不是split(“”)进行交换
除此之外,您还可以插入代码以识别任何进一步的瓶颈。您是否尝试过逐行读取文件而不是按字符索引?