Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
343 views
in Technique[技术] by (71.8m points)

读取json文件,require和fs.readFile哪个性能更好?

需求:想监听一个json文件的变化,需要知道其变更前后的数据差异。

思路:使用chokidar监听json文件,在addchange事件回调中通过requirefs.readFile获取到文件数据。

问题:该json文件数据较大,存放的着几百万条文件的数据,每条数据约200字节。总大小1G多。不知道能否通过require读取这么大的文件,读取效率相比fs.readFile如何。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

尝试造数据模拟跑了10+,得出下列对比数据,从统计数据上看有2个结论:

1、require读取JSON文件 相当于 fs.readFileSync + JSON.parse,明显在这题里,require方案不用考虑

2、如果只是读取文本数据,fs.readFile 要比 fs.createReadStream 快得多,但是如果要转成数据的话,反而是 fs.createReadStream 快的多且稳定,数据量越大越明显。

700w条数据,134Mfs.readFileSyncfs.readFilefs.createReadStreamrequire + 删缓存
读取文本数据294ms294ms1220ms-
读取JSON对象数据(文本再转对象)27200ms27200ms16000ms27000ms
1000w条数据,495Mfs.readFilefs.createReadStream
读取文本数据422ms1690ms
读取JSON对象数据(文本再转对象)47571ms28016ms

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...