23 条回复  ·  2673 次点击
dcsuibian 小成 2025-5-13 18:20:26
数据量大,但不算非常大,刚刚在我电脑上试了下: 生成 2000 行 5196 列的二维数组,耗时:435ms 序列化 2000 行 5196 列的二维数组,耗时:1444ms 写入 2000 行 5196 列的二维数组,耗时:297ms 反序列化 2000 行 5196 列的二维数组,耗时:1138ms JSON 总共也就 190MiB ,这么多数据前端 JSON.parse 一下也就 1.1 秒,不会很卡的 传输要花一点时间 fetch 的话,网络请求和.json()方法都是异步的,不会卡的 所以很明显,就是渲染出了问题,如果你是一个很大的表格,或者都展示在一个 ECharts 图上,那肯定会卡死,优化方法还是挺多的
aimuz 初学 2025-5-13 18:23:48
JSONL 呢?流式返回
iamtuzi3333 楼主 初学 2025-5-13 18:25:15
@dcsuibian 大佬,请教一下这里是怎么操作的,我用的 Python ,转的是 list 类型,list[list[float]]以及 list[float],这个传输量这么少的吗
ufo5260987423 小成 2025-5-13 18:27:17
double->byte[]->string double[][]->byte[][][]->string[][]
iamtuzi3333 楼主 初学 2025-5-13 18:30:33
大佬们,现在用了一个 npz 打包,速度很快,我用的 Python ,代码如下: @app.route('/get_data_bin', methods=['GET']) def get_data_bin(): start = time.time() data_2d, data_1d = readDataFile(r'C:\wxy\吕博士\data\data_2025-04-17 10-56-00_count2000_pointBytes20784.dat') # 将两个数组打包成 .npz 压缩文件到内存 buf = io.BytesIO() np.savez_compressed(buf, data=data_2d.astype(np.float32), timestamps=data_1d.astype(np.float64)) buf.seek(0) print("打包耗时:", round(time.time() - start, 2), "秒") return send_file( buf, as_attachment=True, download_name="data.npz", mimetype="application/octet-stream" )
ntedshen 小成 2025-5-13 18:34:54
var st=new Date().valueOf(); var arr=[]; for(let i1=0;i1<2000;i1++){ var r=[]; for(let i2=0;i2<5196;i2++){ r.push(Math.random()); } arr.push(r); } console.info(new Date().valueOf()-st); var s=JSON.stringify(arr); console.info(new Date().valueOf()-st); JSON.parse(s); console.info(new Date().valueOf()-st); console.info(s.length); VM787:10 185 VM787:12 1067 VM787:14 1331 VM787:15 200255832 200m 的 json 前端解析也就 300ms 。。。 这卡和你数据传输没什么关系。。。 爆内存更没有。。。
nagisaushio 小成 2025-5-13 18:39:12
这种不该直接传 binary 吗,为什么要 JSON float64 的话一共 80M ,float32 就 40M ,加上压缩更少了。
nagisaushio 小成 2025-5-13 18:42:43
@nagisaushio 传到前端都不用解码,套一个 Float64Array 就行了
dcsuibian 小成 2025-5-13 18:43:18
@iamtuzi3333 [img]https://i.imgur.com/H8IBwEa.png[/img] 我帮你试了,也就花了两秒(你可以做个 Loading ),还都花在网络请求上了 另外如果你直接打开这个链接是不行的 [img]https://i.imgur.com/W0ZJUfz.png[/img] 因为浏览器要显示,所以会超出内存 也就是说这么多数你只要不一下子都显示就没有问题,加载到内存而已 主要还是看你前端代码要怎么显示
iamtuzi3333 楼主 初学 2025-5-13 18:57:11
@ntedshen 前端处理是没问题,现在是传输过去很慢,花了十几秒 @nagisaushio 我现在是读取出来,再转为 json ,数据是从 dat 的二进制文件读取出来的,您说的我试试。 @dcsuibian 谢谢大佬,我就是发现直接打开连接就不行了,现在慢是先要读取文件,再把数据转为 json ,前端显示就是想做瀑布图,数据从头到尾 在一个框中从上到下流水一样,类似瀑布的效果,数据大小代表不同的颜色。
返回顶部