介绍一些 G2 5.0 的开发思考和背景信息。
2021 中就筹备准备做 G2 5.0,设计了一个版本,但是因为太忙,没有人手来做,所以过去的大半年,G2 依然是 🐶 在 4.0 半年。
为什么要做 G2 5.0?
核心原因
存量的历史问题,如:布局、性能、数据流程、辅助组件等问题,由于技术设计上存在的问题,已然无法通过补丁的方式来进行修复解决。有些问题的修复,由于历史包袱的存在,无法下手解决,且存在技术上的 break change。
在这样的背景下,我们需要在能力和稳定上做一个取舍和平衡,G2 设计理念依然是基于图形语法的可视化引擎,但从技术实现上需要重新定义,拓展可视化描述,解决技术债问题。同时,我们也希望在此基础上,保障 G2Plot(基于图表分类学的可视化图表库)在底层升级 G2 5.0 之后,对外是兼容的。
技术设计上的糟粕
- 数据处理的流程耦合
View 和 Geometry 的生命周期来回跳,互相依赖对方产生的数据,这个带来了代码十分晦涩。此外,存在数据处理的互相依赖关系,带来很多问题。
- 图形通道固定收敛
图形的视觉通道收敛成 position、color、size、style 几个,所以不同的 Geometry 对于这几个通道的解释有区别,甚至不同 shape 对于通道的解释也有区别,这本身就带来不灵活的扩展性,以及不够语义化。
- scale 和字段绑定,而字段可能和多个通道绑定
设计上,比例尺(scale)是和字段绑定的,从数据中去推断 scale 类型,然后在这个基础上,又产生一个 attr 的模块去让 scale 间接的和视觉通道(channel)绑定。事实上,一个字段可能和多个通道绑定,不同通道对应的相同字段含义可能是不同,因此,比例尺的类型也不一定相同,此外,scale 在不同 geometry 的同一通道上的类型也不一定相同。
👉 默认推荐 scale 类型的推导方式:channel + geometry + data + options
补充:Attribute 模块主要用来“翻译”数据,将数据转换为对应图形通道的视觉属性。举个简单例子,
color('sex')
将sex(性别)
映射到 color 通道上,有f('male') = 'red'
,此时对应sex = 'male'
的几何图形元素为红色,但是此时想拿到具体单个元素对应的原始数据,就已经丢失了。
- 布局逻辑 auto padding
导致两次组件渲染,组件内、组件间的布局逻辑互相干扰,带来 bug。
- 辅助组件不够完善,且不与数据绑定
辅助组件依赖的 @antv/component 不够完善,API 使用上存在很多困扰,也无法扩展出灵活多变的辅助组件;同时很多无法体现数据驱动,导致数据交互过程中,辅助组件无法同步更新。
- 统计能力差
在很多洞察分析下,统计相关的数据很重要,比如:占比、总计、平均值等,这些数据在 brush、drilldown 的场景下是不能提前聚合计算的。由于设计层面上的缺失,导致很多统计相关诉求无法满足。
可视化能力尚不完善
:::info 《数据之美》一书讲到“可视化不仅仅是一种工具,更像是一种媒介,帮助我们挖掘数据背后的信息”。可视化设计除了将信息和数据转化为用户可以理解的图形、图表等元素之外,还能够通过色彩、样式等去凸显其中的变化,让数据“开口”讲故事。 :::
因为一些设计上的问题,导致在过去很多年,很多可视化应该具备的能力一直没有完善,包括但不至于:
- 平行坐标系
- 辅助组件(丰富视觉层次)
- 时序
- 动画语法
- 单元可视化
- …
整体来说,G2 在社区的影响力,特别是学术界的影响力,还很弱。
新的底层渲染引擎 G
G2 5.0 重新设计的重要契机
新的底层渲染引擎 G 提供了:
- 场景树的 UI 构造方式,更好的组件沉淀模式
- 更好的质量
- 更高的性能
这个版本的 G 是完全可以成为整个 AntV 的大底层的,而不是架构图上说说而已。
G2 5.0 要达成的目标
不破不立,如果还背着包袱,G2 的上限就永远是这个。
新的 G2 5.0 通过完全的技术架构,需要达成:
技术目标
写让我们感到自豪的代码和架构。
- 解决存量问题,或者在功能和稳定上做取舍
- 全新的 schema(specification),拓展可视化描述(不限于统计图表,供更多场景使用)
- 新架构,让大量新特性的成为可能,提升专业性
- 一些简易的布局能力,分面能力加强
- 声明式数据转换、数据统计能力
- scale、coordinate 能力扩充
- 时序
- 动画语法
- 单元可视化
- 可视化叙事
- 多 scale 组合的辅助组件
- 升级全新 G 版本,辅助组件升级为 GUI
- 尽量保持兼容,但是不强制兼容 | G2 命令式 API | G2Plot 配置式 API | | —- | —- | | **derer | | | GUI(可复用、可迭代的可视化 UI 组件物料库) | | | G(渲染) | |
社区目标
只有技术质量达到一定的水平,我们自己认可,才会提升我们的运营激情。毕竟谁也不想说这屎山是我写的。
- 产出所有开发过程中的技术设计、分享文章、专利 5+
- 开源开放,能够让社区同学参于共建(5+)
- 与国际上的可视化产品同台竞技,学术界推广,持续运营
- 参入 ChinaVis 2022 挑战赛、大会、沙龙
其他信息
里程碑:
- 6 月 alpha 版本,覆盖 80% 的 G2 旧能力,一次预告运营
- 8 月案例验证结束,发布 beta 版本,开始服务业务(知蛛、图灵中统计图表技术栈混乱的问题)