记一次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 kb0.248 ms1.107 ms
2.2 kb0.245 ms1.458 ms
6.6 kb0.277 ms1.511 ms
19.7 kb0.286 ms1.403 ms
26.7 kb0.305 ms1.377 ms
131 kb0.407 ms1.694 ms
262 kb0.503 ms1.512 ms
789 kb1.021 ms1.993 ms
1.85 Mb1.432 ms2.337 ms
5.53 Mb4.212 ms5.113 ms
11.1 Mb7.581 ms9.304 ms
27.7 Mb18.731 ms20.225 ms
75.8 Mb47.735 ms58.365 ms
227 Mb144.845 ms149.117 ms
379 Mb239.331 ms242.625 ms
438 Mb271.448 ms299.129 ms
607 MbError-----

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

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

最终结论

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

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

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

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

个人网站:www.kuokuo666.com

2023!Day Day Up!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KUOKUO众享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值