高性能界面需求怎么选前端

108 天前
 southcat996

公司有个项目,每秒接收大概 1700 万字节的数据,会分成六个波形图,要求客户端能维持 60 帧,目前公司前端只有 vue,调研了下好像用 vue 没办法做到

4337 次点击
所在节点    程序员
40 条回复
tool2dx
108 天前
用 ffmpeg steaming 在服务期实时合成和推送 60 帧画面,用 vue 来显示,应该能做到。
wu67
108 天前
个人看法. 看到什么帧之类的, 看看 canvas 而不是 vue/react
rabbbit
108 天前
1 在 Vue 里写原生代码看能不能抗住,例如用 canvas 啥的
2 数据太多了,让后端处理一下在抛给前端
3 后端画,前端仅负责展示
4 不行就商量着改需求
总之商量着来,别到最后像 V2 某贴一样解决方法是:我们放弃了 react ,开除了前端。
Kalan
108 天前
图像渲染跟 vue 框架没任何关系,数据量大一般策略都是通过时间段这种合并处理,前端图像渲染的方向有 canvas 、webgpu 这种,60 帧问题不大。
lasuar
108 天前
客户端不是服务器,不要脑补客户端是很好的性能,所以不能实现这么大数据量的实时渲染。需求本身要改变
b821025551b
108 天前
这个瓶颈在于这么大数据量的解析而不是绘图吧,可以在后端做些数据修剪,只抛出绘图必要的数据,按横向 1920 像素点计算,不极限压缩的情况下每秒约( 4*4*6*1920*60 ) 5kb 的数据量用于绘图精度就够了。
tool2dx
108 天前
@Kalan OP 说的每秒 1700 万字节,相当手机要长期占满 200M 带宽了。

客户端毕竟不是 PC ,光处理数据流都够呛,别说 60 帧渲染了。
sagaxu
108 天前
人类的眼睛和大脑处理得了 17M/s 的数据吗?
zephyru
108 天前
1700 万字节? 约 16mb ,如果不是局域网的话,这个数据量,几乎不太可能在前端做这种处理...这是要把本来由客户端展示的内容搬到网页上么..
这和 vue 之类的展示框架其实没啥关系了...不太可能在 dom 上干这种事情...
绘制一般是 canvas ,webgl ,数据处理如果计算量非常大,可以放在子线程里或者上 wassm
和后端商量着来吧,非要前端处理看看能不能从数据与图形之间的关系入手吧,简化需要处理的数据和绘制
lyxxxh2
108 天前
传输:原生 websocket 。
60fps 的波形图: 自己找插件,伪造些数据,测试插件是否能 60fps 。
或者 canvas, 不可能 60fps 都画不出来吧。

至于 vue,这跟 vue 没关系吧。
1700 万字节等于大约 16.25 兆字节( MB )。(吐槽 能不能用 kb 或者 mb 作为单位)

服务器带宽也是个问题,可以将数据作为 json 文件,服务器内网上传 oss 。
发送 oss 路径给前端即可。
shadowyue
108 天前
canvas 来绘图,后端把图表数据处理好给你直接用,按这个思路试试
laobobo
108 天前
#4 +1 ,这玩意应该和框架关系不大,应该是图像渲染方面的,canvas 相对成熟方案较多,WebGPU 出来时间较短,可能差点
erwin985211
108 天前
跟框架没一点关系。可以参考无限滚动的实现方式。只渲染用户能看到的部分,就如大家所说的人脑根本处理不了这么多数据。
gbw1992
108 天前
一秒 16mb 的数据,感觉压力也没不是很大的说
先假设用前端来做,自己部署一个 influxdb 试试,用自带的面板 1s 一刷新看看效果
Leon6868
108 天前
vue 、react 只是来处理 dom 的,你要的渲染和处理这些框架一点都帮不上忙,你应该去了解 canvas 、skia-wasm 这种数据渲染器。而且如此大量的数据根本不可能通过推流推到客户端网页,再在网页端处理。处理思路应该是在服务器端收集数据,解码成简单的波形数据,然后通过 sse 、websocket 实时推送到前端,再在前端展示。
danbai
108 天前
上游戏引擎
danbai
108 天前
@danbai 每秒接收大概 1700 万字节的数据 肯定需要采样重新取数
ipwx
108 天前
少年,1080p 的屏幕,6 张波形图。我们假设一行 3 张,每张波形图一共占据 1920/3 = 640 个像素。

我们假设一个像素上面能显示一根线,那么 640 个像素你能显示 640 个频率的强度,再多了你显示器都没有那么多像素点。那么 640 个频率,每个频率我们假设 32 位采样,也就是 4 个字节。一张图在一个瞬间需要的数据量等于 640 x 4 = 2560 字节。6 张图也就是 2560 * 6 = 15360 字节,也就是 16K 左右。

那么 6 张波形图的一帧,可以被显示器分辨率所显示的信息量只有 16K 。如果算 60 帧,那就是 900K 。

你给的 1700 万字节,约等于 16M 。

所以哪怕不谈绘图,你这里有效的数据量本来就应该不到每秒 1M 。记得把传输效率先优化一下。
weixind
108 天前
数据处理肯定要放到后端处理的。js 性能顶不住 17M/s 。上 wasm 不太值得。后端这种采样的解决方案应该会有很多。
渲染的话,600 个波形图算是高性能需求。6 个不算。
LandCruiser
108 天前
你服务端每秒接收多少字节都和前端没关系,需要你每秒给前端推送 60 * 6 张图片而已(最垃圾的解决方案),优化一下就是每秒给前端返回 60 * 6 组点阵数据( x ,y )。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1048638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX