需求:想监听一个json文件的变化,需要知道其变更前后的数据差异。
思路:使用chokidar
监听json文件,在add
和change
事件回调中通过require
或fs.readFile
获取到文件数据。
问题:该json文件数据较大,存放的着几百万条文件的数据,每条数据约200字节。总大小1G多。不知道能否通过require读取这么大的文件,读取效率相比fs.readFile如何。
需求:想监听一个json文件的变化,需要知道其变更前后的数据差异。
思路:使用chokidar
监听json文件,在add
和change
事件回调中通过require
或fs.readFile
获取到文件数据。
问题:该json文件数据较大,存放的着几百万条文件的数据,每条数据约200字节。总大小1G多。不知道能否通过require读取这么大的文件,读取效率相比fs.readFile如何。
1G多的json文件太大了,不应该直接读到内存.
另外, require 是会有缓存的, 如果要手动删除 require 缓存, 再重新引入, 又比较复杂..
所以还是用读取部分, 然后对比的方式比较好.
10 回答11.1k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
尝试造数据模拟跑了10+,得出下列对比数据,从统计数据上看有2个结论:
1、
require读取JSON文件
相当于fs.readFileSync + JSON.parse
,明显在这题里,require方案不用考虑2、如果只是读取文本数据,
fs.readFile
要比fs.createReadStream
快得多,但是如果要转成数据的话,反而是fs.createReadStream
快的多且稳定,数据量越大越明显。