G6 3.x 从 2018 年 12 月份开发到现在,一年的时间,基本上达到了当初的预期,当要在当前的基础上再开发下去,存在很多不便的地方,充当其冲的就是技术选型,G6 3.x 是基于 JS 开发的,里面有很多 mixin 的操作,不利于后期的继续扩展,其次,当初状态管理的设计也存在不合理的地方,且没有考虑分组的情况。基于种种原因,我们准备接下来基于 TS 来重构 G6,增强可扩展性的同时优化之前存在的不足。
总结下来,目前 G6 存在的问题:
- 技术选型;
- 状态管理不便于使用;
- 节点分组方案不适用复杂的场景;
- changeData 有BUG;
- 自定义Shape比较复杂,将更新的逻辑交给了用户;
- 性能比较差,节点数量多的时候比较卡;
- 事件不灵敏;
- plugin 可靠性及扩展性差;
- 复杂的交互,定义 Behavior 时比较麻烦。
重点调整的内容
针对上面存在的种种问题,我们接下来会重点从以下方面进行调整:
- 工程化改造:使用 TS 重构;
- 升级底层渲染引擎 G 至 G4.0;
- 重新设计 state 机制;
- 设计节点分组方案;
- 集成图算法;
- 重新设计自定义 Shape 的机制;
- 新增常用的组件;
- 重新设计 Plugin 机制,考虑如何与组件融合。
对于这些调整的内容,我们计划逐步推进,循序渐进地来调整,在不改变整体架构的前提下,先完成 TS 重构和底层渲染引擎 G 的升级。完成这两部分工作以后,接下来会重点设计 state 和节点分组机制,在实现这两个功能多的过程中,可能会涉及到架构的修改。
里程碑
截至时间 | 内容 | 说明 |
---|---|---|
2019-12-27 | 国际化 | |
G6 Build 问题 | 通过提供解决方案来解决 | |
工程化改造准备工作 | ||
Graphin中增加节点分组 | ||
Graphin交互优化 | ||
Graphin边优化 | ||
Graphin节点状态 | ||
Graphin/G6 组件 | Minimap、Timebar | |
2020-01-17 | 工程化改造 | 使用 TS 重构 |
升级底层渲染引擎 | 升级 G 到 4.0 | |
Graphin组件 | Legend,使用 AntV 组件 | |
基于Graphin实现一个应用场景 | 流量分析 | |
2020-02-28 | Graphin 升级新版本 | |
Graphin 地图模式 | ||
Graphin 事件中心 | ||
基于Graphin实现一个应用场景 | 九色鹿页面流量分析 | |
设计规范实现 | ||
202-03-20 | ? | |
2020-06-30 | 设计 & 开发 State | state、节点分组等功能 |
设计 & 开发节点分组 | ||
2020-11-22 | 集成图算法 | |
重新设计组件及plugin机制 | 图分析相关的组件 | |
2021-03-01 | 重构自定义 Shape 机制 | |
接入交互语法 | 使用交互语法重构 Behavior 部分 |
通过工程化改造,可以增强 G6 的可扩展性,通过升级底层渲染引擎G,可以解决性能和事件的问题。
工程化改造
State
目前的 State 机制存在以下问题:
- 只对 KeyShape 起作用,不支持 KeyShape 之前的其他部分;
- Shape、Item 、Behavior 及定义 自定义Shape时都可以设置状态,相互之间都有影响;
节点分组
目前的分组方案比较简单,不适用于稍微复杂的场景,希望分组方案能够满足以下功能:
- 自定义分组:自定义样式、大小等;
- 分组可根据数据自定渲染;
- 能设置分组的层级;
- 能动态改变分组样式和大小;
- 能够自由拖拽分组,并且分组中节点随着移动;
- 节点拖入、拖出到分组;
- 分组拖入、拖出分组;
- 收起展开分组,可以自定义动画:收起时里面的节点也慢慢消失;
- 拖拽分组中的节点,可根据不同交互区分是拖出去还是分组自动变化。
需要讨论的问题:
- 分组与节点、边的层级,如何解决遮挡问题。