gpt4 book ai didi

javascript - 在 Node.js 中读取和解析数字 ASCII 对文件的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:02 25 4
gpt4 key购买 nike

我正在使用 Node.js 来读取和解析编码数字对的文件。我有一个这样的文件:

1561 0506
1204 900
6060 44

我想将其作为数组读取,如下所示:

[[1561,0506],[1204,900],[6060,44]]

为此,我使用 readStream,将文件作为 block 读取并使用 native 字符串函数进行解析:

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);
};
});

不过,这花了很多时间(我的机器上需要的文件需要 4 秒)。我看到一些原因:

  1. 字符串的使用;
  2. 使用“数字”;
  3. 数组的动态数组。

我重写了算法,没有使用内置字符串函数,而是使用循环,令我惊讶的是,它变得慢得多!有什么办法可以让它更快吗?

最佳答案

警告:我尚未测试此解决方案的性能,但它是完整的,因此应该很容易尝试。

使用 this liner implementation 怎么样?基于 this question 中的注释.

使用内衬:

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("") 进行交换。

除此之外,您还可以检测代码来识别任何进一步的瓶颈。

关于javascript - 在 Node.js 中读取和解析数字 ASCII 对文件的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com