建设企业网银如何对账,seo优化推广工程师,江西省住房和城乡建设厅,网站收录量是什么意思假设您需要使用 JavaScript 在服务器上读取多个文件。Node.js 这样的运行时环境中有许多读取文件的方法。哪一种最好#xff1f;让我们来考虑各种方法。
使用 fs.promises
const fs require(fs/promises);
const readFile fs.readFile;
readFile(lipsum.txt, …假设您需要使用 JavaScript 在服务器上读取多个文件。Node.js 这样的运行时环境中有许多读取文件的方法。哪一种最好让我们来考虑各种方法。
使用 fs.promises
const fs require(fs/promises);
const readFile fs.readFile;
readFile(lipsum.txt, { encoding: utf-8 })
.then((data) {...})
.catch((err) {...})
使用 fs.readFile 和 util.promisify
const fs require(fs);
const util require(util);
const readFile util.promisify(fs.readFile);
readFile(lipsum.txt, { encoding: utf-8 })
.then((data) {...})
.catch((err) {...})
使用 fs.readFileSync
const fs require(fs);
const readFileSync fs.readFileSync;
var data readFileSync(lipsum.txt, { encoding: utf-8 })
使用 await fs.readFileSync
const fs require(fs);
const readFileSync fs.readFileSync;
async function f(name, options) {return readFileSync(name, options);
}
使用 fs.readFile
const fs require(fs);
const readFile fs.readFile;
fs.readFile(lipsum.txt, function read(err, data) {...});
性能测试
我写了一个小的 性能测试重复从磁盘读取一个文件。这是一个简单的循环每次访问同一个文件。我报告读取文件 50,000 次需要的毫秒数。文件相对较小略超过一千字节。我使用装有数十个 Ice Lake Intel 核心和大量内存的大型服务器。我使用的是 Node.js 20.1 和 Bun 1.0.14。Bun 是一个竞争的 JavaScript 运行时。
我多次运行了基准测试并在所有情况下报告最好的结果。您的结果可能会有所不同。
Node.js时间Bun时间fs.promises2400 ms110 msfs.readFile 和 util.promisify1500 ms180 msfs.readFileSync140 ms140 msawait fs.readFileSync220 ms180 msfs.readFile760 ms90 ms
至少在我的系统上在这个测试中使用 Node.js 的 fs.promises 明显比其他任何方法的成本更高。Bun 运行时在这个测试中比 Node.js 快得多。
对于fs.promises结果比看起来更糟的是以下这个意义。我发现readFileSync使用了 300 ms 的 CPU 时间而fs.promises则使用了 7 秒的 CPU 时间。这是因为在基准测试期间fs.promises触发了多个核心的工作。
将文件大小增加到例如 32kB并不改变结论。如果使用显著更大的文件许多 Node.js 情况会因为“堆限制分配失败”而出错。Bun 即使在大文件中也能继续运行。使用 Bun 的测试结果不改变结论我的测试表明即使对于大文件fs.readFile 也始终更快。
致谢。我的基准测试灵感来源于 Evgenii Stulnikov 提供的一个测试案例。
源自How to read files quickly in JavaScript – Daniel Lemires blog