antvis / X6

🚀 JavaScript diagramming library that uses SVG and HTML for rendering.
https://x6.antv.antgroup.com
MIT License
5.56k stars 1.67k forks source link

X6与G6的性能对比, 以及X6多节点类型下的FPS临界点讨论 #3266

Closed Eve-Sama closed 1 year ago

Eve-Sama commented 1 year ago

Describe the bug

做了个测试, 点击按钮可以快速生成50个节点, 拖拽节点进行移动. 我发现50个节点的时候fps还是57, 而当节点增加到100个时, fps则为十几, 卡顿非常明显

图片

另外, 还有个有趣的现象. 如果拖拽的元素的编号越靠前, 则越顺畅, 反之越卡顿. 为什么fps会和拖拽元素的顺序有关系呢?

想请问下在100个元素下, 拖拽卡顿是正常的吗?

Your Example Website or App

https://eve-sama.github.io/x6-angular-shape/#/x6

Steps to Reproduce the Bug or Issue

  1. 打开https://eve-sama.github.io/x6-angular-shape/#/x6
  2. 点击2次生成50个节点的按钮, 产生100个节点.
  3. 打开fps, 拖拽元素查看fps值会明显降低

Expected behavior

始终保持60上下fps

Screenshots or Videos

视频有点大, 我提供个OSS

Platform

Additional context

No response

Eve-Sama commented 1 year ago

我知道SVG比不了Canvas. 原理上就不可能比的过, 但是我想知道SVG卡顿的临界点在哪, 现在是50个就有卡顿感, 100个就没法用了基本上. 这是正常的吗?

Max-ChenFei commented 1 year ago

@Eve-Sama 请问是否考虑过 d3, Konva, fabric or Pixijs 等呢?

Eve-Sama commented 1 year ago

@Eve-Sama 请问是否考虑过 d3, Konva, fabric or Pixijs 等呢?

没有做过那几个lib的调研. 我的需求是实现流程图, 节点数多的话可能有几百个. 有什么好的推荐吗?

Eve-Sama commented 1 year ago

稍等, 为了更公平的对比, 我将x6和g6添加的节点都设置为了HTML类型.看发现在性能上差距并不明显, 怀疑可能和shape有关, 我再调试看看

Max-ChenFei commented 1 year ago

@Eve-Sama 请问是否考虑过 d3, Konva, fabric or Pixijs 等呢?

没有做过那几个lib的调研. 我的需求是实现流程图, 节点数多的话可能有几百个. 有什么好的推荐吗?

你好,我是自己写了一个库基于canvas的,基于canvas的几百个节点还是可以的。 我也是在对比基于svg,canvas, webgl的一些库。

Eve-Sama commented 1 year ago

将demo做了下改造, 以方便更加全面的对比.

G6

拖动性能

在HTML(准确的说是SVG)类型节点增加至1400时, 拖动时的FPS波动在50上下. 图片

添加节点性能

在节点添加到200个时, 已经出现明显等待感. 随着数量的提升, 等待的时间越来越久. 当节点从1000添加至1050时耗时1.39秒.

X6

拖动性能

在HTML类型添加至7000时, 拖动的FPS波动在50上下. 图片

但是Angular Component类型添加至2000时, FPS波动就已经到了50上下.

添加节点性能

无论是HTML还是Component, 从0增加至7000, 全程都是秒完成, 无任何卡顿感, 不确定临界值.

说明

NewByVector commented 1 year ago

@Eve-Sama 非常棒的性能分析。

x6-bot[bot] commented 4 months ago

This thread has been automatically locked because it has not had recent activity.

Please open a new issue for related bugs and link to relevant comments in this thread.