Canvas FPS 只有 10 几 求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SWBMESSI
V2EX    前端开发

Canvas FPS 只有 10 几 求助

  •  
  •   SWBMESSI 1 天前 604 次点击

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

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

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

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

    16 条回复    2025-11-28 14:57:14 +08:00
    SWBMESSI
        1
    SWBMESSI  
    OP
       1 天前
    WynneChan
        2
    WynneChan  
       1 天前   1
    尝试下 Canvas 分层,在你拖动开始时,将受到影响的 Node 和 Edge 创建到一个新的 Canvas 上面,其他静止的节点保持在原来的 Canvas 上。后续的拖动重绘都只重绘在临时创建的这个新的 Canvas 上,减少重绘的数量。
    sillydaddy
        3
    sillydaddy  
       1 天前
    你给的这图啥也看不出来啊,那些密密麻麻的黑黢黢的点、蓝色的线,都是啥?
    SWBMESSI
        4
    SWBMESSI  
    OP
       1 天前
    @WynneChan 感谢感谢,这个方法我试一下
    SWBMESSI
        5
    SWBMESSI  
    OP
       1 天前
    @sillydaddy 转 gif 后模糊了, 就是移动节点时候 fps 降低到 20 以下, 静止状态或少节点状态下 fps60
    WynneChan
        6
    WynneChan  
       1 天前
    @SWBMESSI #4 如果还达不到要求,检查下代码里的渲染是不是多次执行。可以试下把渲染合并
    ```ts
    ctx.beginPath();
    // Node 和 edge 绘制
    ctx.closePath();
    ```
    再进一步就是开个 web worker ,使用 OffscreenCanvas 做离屏渲染
    hijqw12931092
        7
    hijqw12931092  
       1 天前
    你用错东西了吧,用 svg 去做 估计合适,D3.js 看看
    xuncs
        8
    xuncs  
       1 天前
    试试 konvajs ,xyflow 这些
    dingjs
        9
    dingjs  
       1 天前
    才这么几个节点根本不可能卡,哪怕全部清空重绘,建议把代码给 AI 分析一下。
    wangritian
        10
    wangritian  
       1 天前
    确认一下浏览器是否打开了 gpu 硬件加速?另外 canvas 某些代码会不会导致回退到 cpu ?
    EspoirBao
        11
    EspoirBao  
       1 天前
    用 Fabric.js 把,带独显几千个点不成问题,但是超过 20w 个点就不太像了
    oubenruing
        12
    oubenruing  
       1 天前
    先开一下控制台 performance 记录一下,call tree 观察耗时。
    MossFox
        13
    MossFox  
       1 天前 via Android
    不知道具体实现细节,来随便猜一个看看。
    如果是在鼠标事件监听器里面就操作 Canvas 画图的话,改成单独修改节点数据状态但不立即开始画,更新画布的时机统一等待 animation frame 。
    SWBMESSI
        14
    SWBMESSI  
    OP
       1 天前
    @wangritian 需要手动开启 开启的话性能好了两倍
    SWBMESSI
        15
    SWBMESSI  
    OP
       1 天前
    @MossFox 开始是这样的鼠标监听器里面就更新,改了之后的性能提升不明显
    UnluckyNinja
        16
    UnluckyNinja  
       11 小时 41 分钟前
    F12 捕捉下性能图,看看火焰图哪个函数时间占比高就知道了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     999 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:38 PVG 02:38 LAX 10:38 JFK 13:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86