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

发布于 2022-09-12 12:53:15 字数 293 浏览 18 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

羞稚 2022-09-19 12:53:15

尝试造数据模拟跑了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
空城缀染半城烟沙 2022-09-19 12:53:15

以stream的形式读文件指定位置,这样不用读取全部

心不设防 2022-09-19 12:53:15

1G多的json文件太大了,不应该直接读到内存.
另外, require 是会有缓存的, 如果要手动删除 require 缓存, 再重新引入, 又比较复杂..
所以还是用读取部分, 然后对比的方式比较好.

无人问我粥可暖 2022-09-19 12:53:15

@星空 问个小点,文本转数据是读取完成再转的么

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文