Nodejs 终于有内置的 file.readLines()
在处理大型文本文件(例如解析日志文件)时,出于效率和性能原因,推荐逐行加载/迭代内容,而不是将所有内容读入内存。在 Nodejs 中,这一直很麻烦,因为从日常用户的角度来看,逐行读取的方式看起来很繁琐,而且太底层了。不过,受益于最近合并到版本 v18.11.0
的 PR,情况不再如此,现在有内置的 FileHandle.prototype.readLines
,使用起来非常方便。
过去麻烦的方法
import fs from 'node:fs';
import readline from 'node:readline';
const fileStream = fs.createReadStream('input.txt');
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
for await (const line of rl) {
console.log(`Line from file: ${line}`);
}
现在方便的方式
import { open } from 'node:fs/promises';
const file = await open('input.txt');
for await (const line of file.readLines()) {
console.log(`Line from file: ${line}`);
}
PS:关于该方法是否应该从 PR 增加到核心 nodejs 库,存在一些争论和讨论。从最终用户的角度来看,我认为这是一个很好的添加,它让使用 nodejs 处理大型文本文件更加方便,减少了记住 readline
模块的方法所需的脑力负担,并将代码行数减少了 50%,尽管它只是 readline
之上的一个包装方法。
参考资料