拓扑图实现方案对比


一、业务背景
近期,我司在做相关云服务的拓扑架构感知,因此项目中最大也最复杂的功能就是拓扑图的实现,拓扑图和普通的图有一些不同的地方。

  1. 拓扑图不同于其他简单图的实现,拓扑图是现实网络及节点的真实写照,因此会有很巨量的节点,因此性能是一个很大的问题需要被关注。也就是如何保证不卡顿,流畅。
  2. 拓扑图往往存在不同的层级或维度,因此在实现过程中,会有不同维度的拓扑图的穿插出现。
  3. 拓扑图是图的数据结构,但是某个节点的数据项中可能还是树的数据结构,且会有不同交集的节点存在连线问题。因此数据结构是很复杂的,在进行数据结构设计时要考虑充分。

二、实现方案对比

1、 免费方案

方案 简介 官网 / 示例 优点 缺点 建议
jTopo Javascript Topology library是一款完全基于 HTML5 Canvas 的关系、拓扑图形化界面开发工具包。(国内) https://github.com/wenyuan/jtopo_topology 1、 免费
2、 轻量
3、 无明显性能问题
4、 功能丰富,支持各种自定义操作
5、 国产,文档简单,上手容易
1、 未开放源代码,如需做功能增强,对着混淆后的 js 代码做修改比较费时间
2、 2015 年就停更了,作者在 2019 年表示正在准备新版本,当前进度未知
3、 有一些 bug(比如自动布局)
4、 不是采用模块化编程的,在现代化框架(比如 Vue.js)中使用比较麻烦(但可以实现)
1、 小项目中可以使用,大型项目不建议
2、 新手利好
Vis.js 基于 HTML5 Canvas开发的动态可视化库。该库被设计为易于使用,处理大量的动态数据,并支持对数据的操作和交互。( 国外) 1、https://visjs.org/
2、https://visjs.github.io/vis-network/examples/
1、 开源免费
2、 无明显性能问题
3、 功能丰富,支持各种自定义操作
4、 支持自动布局(防碰撞算法)
1、 需要投入一些时间通读文档,英文不好的人会比较费力
2、 自带的连线样式中没有折线的样式
1、 先搞清楚 vis 中的数据结构 DataSet,再入手使用
2、 耐心看文档
AntV G6 G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。 蚂蚁金服 AntV、(国产) 1、https://antv.vision/zh
2、https://github.com/wenyuan/cceditor
1、开源免费
2、上手简单,可扩展性强
3、功能丰富,支持各种自定义操作
4、由蚂蚁金服 AntV 团队开发,从维护性和生态圈角度考虑相对有保障
5、支持自动布局(早期借助 d3-force 实现,后期已经被内部支持)
1、有性能问题(&g200 个网元单位)
2、文档易用性一般(早期托管在语雀时,缺少全文搜索功能)
3、有时候文档和版本会脱节(可以理解,问题不大)
1、大厂团队开发维护,后期有保障,大小项目都可以使用
2、可以学习里面的一些编程思想和技巧
jsPlumb jsPlumb 是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素。(个人,国外) 1、https://jsplumbtoolkit.com/
2、https://wdd.js.org/jsplumb-chinese-tutorial
1、开源免费
2、功能丰富,支持各种自定义操作
1、 demo 过于简单
2、多条线时可能会叠在一起
3、从 demo 来看感受不到可以从哪开始连线
1、感兴趣的可以尝试下
 JointJs >JointJS 是一个开源前端框架,支持绘制各种各样的流程图、工作流图等。Rappid 是 Joint 的商业版,提供了一些更强的插件。(个人,国外) https://www.jointjs.com/ 1、连线可设置项较为全面
2、原生支持拖拽和缩放
3、线可以手动添加转折点
4、有根据已添加点和线自动布局功能
5、扩展相对容易
1、对于线的交互方式有点反直觉
2、demo 上有 bug,修改了信息不刷新
3、demo 的流程图不是以像素为基本单位,拖拽会感觉卡顿
4、纯英文文档,有的人会觉得读起来费力
1、感兴趣的可以尝试下
D3.js 这个框架发布于2011年。从当时的眼光来看,利用Data Join(Thinking with Joins)来完成『DOM结点』与『数据』之间的更新好像还是挺先进的。 https://www.d3js.org.cn/ 1、API灵活
2、定制性高
1、D3始终操作的是真实DOM,尽管每次只更新数据变动所对应的DOM,代价也是挺大的,会触发浏览器重绘和重排,在大量数据面前,性能可能不如canvas,尤其是有交互效果时,大量svg元素进入动画队列,页面会卡顿的非常厉害。 2、上手难度大
3、学习成本高
1、似乎不是很适应现代前端框架
ECharts ECharts 关系图(国内,百度) https://echarts.apache.org/zh/index.html 1、上手非常简单 1、扩展性弱(不是专做图编辑器的,关系图只是 ECharts 中的一项) 1、可以用在定制化的需求中,不需要拖拉拽等功能
Le5le-topology Le5le-topology 是一个可视化在线绘图工具,使用 Canvas + Typescript。支持 topology, UML、微服务架构、动态流量、SCADA 场景等。( 个人、国产) 1、http://topology.le5le.com/
2、https://github.com/le5le-com/topology
1、开源免费
2、支持的图很多
3、技术比较新(Typescript)
4、开箱即用,几乎不用额外开发成本
1、个人开发的,2019 年起作者在各大网站推广,持续维护性和生态圈尚不成熟 1、观察一下,看作者是否在持续稳定发展,或者是否会形成开发团队

2、付费方案

方案 简介 官网 / 示例 优点 缺点 建议
hightopo 提供完整的基于 HTML5 图形界面组件库。使用 HT for Web 您可以轻松构建现代化的,跨桌面和移动终端的企业应用,无需担忧跨平台兼容性,及触屏手势交互等棘手问题。 https://www.hightopo.com/ 1、 省事
2、 支持 3D 图
1、 贵 1、 有预算的团队可以考虑
Qunee 使用HTML5 Canvas技术,绘制清新、流畅的网络图,可用于社交网络图、拓扑图、流程图、地图等需求, JS组件封装,藏繁琐于简洁,轻松构建优雅的互联网应用与企业应用,让数据的在线可视化变得容易 http://www.qunee.com/ 1、 省事
2、 有一定颜值
1、 贵
2、 对普通需求来说,有些功能显得臃肿
3、 不利于二开,需要事件扩展时如果原生不支持可能会非常麻烦(不过既然花钱了,应该可以联系厂家定制)
1、 有预算的团队可以考虑

声明:Xuhao's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 拓扑图实现方案对比


Carpe Diem and Do what I like