读取 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