Canvas FPS 只有 10 几 求助

1 天前
 SWBMESSI

本人习惯了借助于 macos mindnode 思考的方式,切换 windows 没有趁手的思维导图用,

于是想手搓一个近似的,但是开发一点后突然想测一下节点多了性能如何,

不测不知道一测吓一跳,二十多个节点拖拽的时候 fps 只有十几二十

求助一下,是否是 Canvas 的局限,还是哪里可以优化?

612 次点击
所在节点    前端开发
16 条回复
SWBMESSI
1 天前
WynneChan
1 天前
尝试下 Canvas 分层,在你拖动开始时,将受到影响的 Node 和 Edge 创建到一个新的 Canvas 上面,其他静止的节点保持在原来的 Canvas 上。后续的拖动重绘都只重绘在临时创建的这个新的 Canvas 上,减少重绘的数量。
sillydaddy
1 天前
你给的这图啥也看不出来啊,那些密密麻麻的黑黢黢的点、蓝色的线,都是啥?
SWBMESSI
1 天前
@WynneChan 感谢感谢,这个方法我试一下
SWBMESSI
1 天前
@sillydaddy 转 gif 后模糊了, 就是移动节点时候 fps 降低到 20 以下, 静止状态或少节点状态下 fps60
WynneChan
1 天前
@SWBMESSI #4 如果还达不到要求,检查下代码里的渲染是不是多次执行。可以试下把渲染合并
```ts
ctx.beginPath();
// Node 和 edge 绘制
ctx.closePath();
```
再进一步就是开个 web worker ,使用 OffscreenCanvas 做离屏渲染
hijqw12931092
1 天前
你用错东西了吧,用 svg 去做 估计更合适,D3.js 看看
xuncs
1 天前
试试 konvajs ,xyflow 这些
dingjs
1 天前
才这么几个节点根本不可能卡,哪怕全部清空重绘,建议把代码给 AI 分析一下。
wangritian
1 天前
确认一下浏览器是否打开了 gpu 硬件加速?另外 canvas 某些代码会不会导致回退到 cpu ?
EspoirBao
1 天前
用 Fabric.js 把,带独显几千个点不成问题,但是超过 20w 个点就不太像了
oubenruing
1 天前
先开一下控制台 performance 记录一下,call tree 观察耗时。
MossFox
1 天前
不知道具体实现细节,来随便猜一个看看。
如果是在鼠标事件监听器里面就操作 Canvas 画图的话,改成单独修改节点数据状态但不立即开始画,更新画布的时机统一等待 animation frame 。
SWBMESSI
1 天前
@wangritian 需要手动开启 开启的话性能好了两倍
SWBMESSI
1 天前
@MossFox 开始是这样的鼠标监听器里面就更新,改了之后的性能提升不明显
UnluckyNinja
14 小时 35 分钟前
F12 捕捉下性能图,看看火焰图哪个函数时间占比高就知道了

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

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

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

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

© 2021 V2EX