记一次node的fs模块读取json文件速度测试

使用环境参考

Node.js v16.19.1

CPU AMD R5-6600H
内存 三星 DDR5 8Gx2
硬盘 海力士固态 512G 8000MB/s
笔记本

前情提要

事情是酱紫滴,在学习新前端框架时,想写个简单的管理后台练练手,准备后端用 express 简单写个增删改查。然后关于如何存储工单数据,在纠结了一阵用数据库 MySQL 还是 MongoDB 后,我觉得 json 一个文本数据也挺好的。

但是身为一个程序员的探索欲望 + 强迫症就上来了,这玩意响应速度可以吗?

安装 Node,新建测试 js,开搞!使用 fs 模块的 readFilereadFileSync 测试。

测试代码(同步):

const fs = require('fs')

console.time('kuo')

const data = fs.readFileSync('data.json', { encoding: 'utf-8' })

console.timeLog('kuo')

测试代码(异步):

const fs = require('fs')

console.time('kuo')

fs.readFile('data.json', { encoding: 'utf-8' }, (err, res) => {
const data = res
console.timeLog('kuo')
})

其中 data.json 是一个大数组,数组中每一项都是一条工单数据,随机几项字段,然后随机字母填充生成,一行一条:

[
// ...
{
"car": "akagjdgskda",
"arr": [
{ "name": "kkalhdagdjhahdakjd", "val": [1, 2, 3, 4, 5, 7, 8, 9, 10] },
{ "name": "kkalhdagdjhahdakjd", "val": [1, 2, 3, 4, 5, 7, 8, 9, 10] },
{ "name": "kkalhdagdjhahdakjd", "val": [1, 2, 3, 4, 5, 7, 8, 9, 10] }
]
}
// ...
]

速度测试

一切准备就绪,我开始从小 json 开始,逐渐填充数据,调用完脚本生成几十条随机数据后,我开始 ctrl-cv 复制数据。以下为测试方式,每次测试取 3 次运行时间的平均值:

结果:

data.json(大小) fs.readFileSync(时间) fs.readFile(时间)
1.1 kb 0.248 ms 1.107 ms
2.2 kb 0.245 ms 1.458 ms
6.6 kb 0.277 ms 1.511 ms
19.7 kb 0.286 ms 1.403 ms
26.7 kb 0.305 ms 1.377 ms
131 kb 0.407 ms 1.694 ms
262 kb 0.503 ms 1.512 ms
789 kb 1.021 ms 1.993 ms
1.85 Mb 1.432 ms 2.337 ms
5.53 Mb 4.212 ms 5.113 ms
11.1 Mb 7.581 ms 9.304 ms
27.7 Mb 18.731 ms 20.225 ms
75.8 Mb 47.735 ms 58.365 ms
227 Mb 144.845 ms 149.117 ms
379 Mb 239.331 ms 242.625 ms
438 Mb 271.448 ms 299.129 ms
607 Mb Error —–

当数据达到 462 万行的时候,我随机的这种简单工单数据大约 440Mb,读取速度约 0.3 秒。

当数据大于 512Mb 时,调用 fs.readFileSync 时报错:

最终结论

将数据以表格形式呈现,数据大小为横轴(单位 kb),时间为纵轴(单位为 ms):

两者基本呈现正比例变化,简单拟合后,我的电脑测试完,速度约为 1.51Mb/ms

做个后台管理系统,应该没问题!当然前提是服务器 CPU 不太差,且使用并发不高!!!

我是阔阔,一位喜欢研究的程序员!

个人网站:www.kuokuo666.com

2023!Day Day Up!

记一次node的fs模块读取json文件速度测试

https://www.kuokuo666.com/home/kk060.html

作者

KUOKUO众享

发布于

2023-07-03

更新于

2024-03-05

许可协议

评论