读取 json 文件,require 和 fs.readFile 哪个性能更好?
参考地址:https://www.safekodo.com/wiki/content/68973962.html (opens new window)
# 0. 前言
需求:想监听一个 json 文件的变化,需要知道其变更前后的数据差异。
思路:使用chokidar
监听 json 文件,在add
和change
事件回调中通过require
或fs.readFile
获取到文件数据。
问题:该 json 文件数据较大,存放的着几百万条文件的数据,每条数据约 200 字节。总大小 1G 多。不知道能否通过 require 读取这么大的文件,读取效率相比 fs.readFile
如何。
# 1. 解决方案
尝试造数据模拟跑了 10+
,得出下列对比数据,从统计数据上看有 2 个结论:
1、require
读取 JSON
文件相当于 fs.readFileSync + JSON.parse
,明显在这题里,require
方案不用考虑
2、如果只是读取文本数据,fs.readFile
要比 fs.createReadStream
快得多,但是如果要转成数据的话,反而是 fs.createReadStream
快的多且稳定,数据量越大越明显。
700w 条数据,134M | fs.readFileSync | fs.readFile | fs.createReadStream | require + 删缓存 |
---|---|---|---|---|
读取文本数据 | 294ms | 294ms | 1220ms | - |
读取 JSON 对象数据(文本再转对象) | 27200ms | 27200ms | 16000ms | 27000 ms |
1000w 条数据,495M | fs.readFile | fs.createReadStream |
---|---|---|
读取文本数据 | 422ms | 1690ms |
读取 JSON 对象数据(文本再转对象) | 47571ms | 28016ms |
编辑 (opens new window)
上次更新: 2022/12/08, 14:12:00