V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SWBMESSI
V2EX  ›  前端开发

Canvas FPS 只有 10 几 求助

  •  
  •   SWBMESSI · 1 天前 · 613 次点击

    本人习惯了借助于 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  
       14 小时 35 分钟前
    F12 捕捉下性能图,看看火焰图哪个函数时间占比高就知道了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:32 · PVG 05:32 · LAX 13:32 · JFK 16:32
    ♥ Do have faith in what you're doing.