G2 是蚂蚁集团 AntV 团队推出的一套可视化语法,专注于创造基于网页的可视化。G2 在今年的 3 月 21 日和 AVA 团队一起发布了 5.0 正式版本,其专业、简介的语法帮广大开发者解决了大大小小的可视化难题。接下来我们来看看 G2 栈团队近一年来的工作,以及对未来的展望。
从心出发,焕然一新
首先给大家介绍一些让 G2 栈看上去焕然一新的工作,它们也是最容易被开发者感知的工作。
Ant Design Charts 2.0
在社区同学的踊跃参与下,我们基于 G2 5.0 版本推出了 Ant Design Charts 2.0:一个 React 的图表库。除了透出 G2 5.0 的所有能力之外,我们还对图表的丰富度(包含 34+ 图表)和交互等进行了加强。目前 Ant Design Charts 2.0 已经在蚂蚁内部多个业务落地,欢迎大家试用。
主题
在更新了 G2 栈家族成员之后,我们也和设计师合作对图表的"皮肤"进行了升级。其中最大的变化就是推出了新的离散色板,该新色板除了更自然、具有科技感之外,也解决了老色板对比度不够、"模糊"等问题。同时我们也对图表中元素的间距和颜色进行了调整,使得图表包含更清晰的信息层级。
另一发面,在支持了新的 Light 和 Dark 主题之外,我们也推出了新的 Acadamy 主题,用于偏学术的场景。
官网
为了让开发者能更好地了解 G2 的能力和学习 G2 的使用方式,我们也对官网进行了优化。首先是引入了交互式文档的概念,让官网文档中的代码块都可以运行的,从而看到最后的可视化效果。
其次是给官网的案例增加了 Spec 切换按钮,可以一键看到图表的 Spec 配置。最后是基于 5.0 的主题增加了主题构建器,可以根据自己的场景自定义主题。
能力稳定,锦上添花
除了上述"吸睛"的新特性之外,我们也做了一些更务实的工作。因为我们知道,对于一个新版本来说,只有稳定的能力,才能让开发者安心。当然,我们同时也在持续迭代满足内外部开发者一些强烈的诉求。
Bug 和 Issue
能力稳定最重要的指标就是 Bug 要少。为了达到这个目标,我们积极响应 issue,尽量保证大部分 issue 的回复时间是在 1 天以内。最后,在社区同学的热心贡献下,我们修复了大量内存泄漏、tooltip 不符合预期以及交互状态失效等 Bug,大大提高了 G2 5.0 的使用体验。
自动布局
组件(坐标轴、图例和滑动轴等)的布局和展示一直是可视化中的难点和痛点。在 4.0 中,需要对组件绘制两次,然后基于此调整坐标系,才能得到最后的布局结果,这会造成一定性能损失。而 5.0 采用的布局算法,只用绘制一次组件,同时缓存计算结果,减少了这部分的性能损失。另一方面,也优化了在多个组件的存在的情况下的布局效果,比如多个图例、多个坐标轴等。
交互增强
交互是可视化中很重要的一部分,我们对此也进行了优化。第一,对 4.0 版本拥有的交互进行了全面的升级,提高了自定义的能力,比如支持自定义 brushFilter 中 brush 的样式,以及支持改变大小等。
第二,通过 chart.on
和 chart.emit
API 暴露了获得和设置交互状态的能力,大大降低了实现图表联动的成本。
更多 Mark 和图表
为了满足更丰富的场景,我们也推出了更多 Mark,Shape 以及 Data 等,用于绘制更多的图表,比如 Density、Venn、Liquid 和 Trail 等。
架构优化,蓄势待发
除了功能和 Bug,我们投入了大量的精力去优化架构,比如测试环境、各个模块的接口等。我们坚信,合理可靠的架构是稳定性和未来蓬勃发展的坚实基础。
按需加载
随着 G2 的功能不断增加,为了解决随之而来的包大小的问题,我们推出了按需加载的功能。代码整体的架构是 Runtime + Lib 的模式,Runtime 负责调度 Lib 渲染图表,而 Lib 提供一系列可视化组件。
在这样的设计下,可以通过按需使用图表对应的 Lib 来实现按需加载,比如在只绘制简单图表的时候使用 Core Lib。
稳定测试
稳定测试是持续集成的关键,也是重构代码时候的保障。为了减少新增测试的成本,提高测试的可解释性、独立性和覆盖率,我们在 5.0 版本中引入了基于 node-canvas 的本地截图测试。但是我们发现 node-canvas 在不同平台存在安装困难,截图不一致的问题,在替换 playwright 失败之后,我们选择了 JSDOM 使得测试跨平台稳定。该测试环境也用于了 AntV 其他生态,比如 G6 和 Component。
扩展性
为了最大程度把灵活性暴露给用户,G2 5.0 中所有的可视化组件的都是可自定义的。而今年,在保证上层 API 不变的情况,我们对 Shape、Coordinate 等可视化组件的接口进行了调整,让其变得更加简洁,也能暴露更多的内部计算属性和状态。
面向未来,生态繁荣
从某种意义上讲,能力稳定和架构优化都是面向未来的,因为在这两者的基础上 G2 才能去探索更多的方向,也能让更多的人使用 G2 和参与 G2 的贡献,促进 G2 生态的繁荣。
3D
得益于 G2 底层依赖的强大的渲染引擎 G,G2 迈出了 3D 可视化的尝试,目前已经支持了 3D 条形图、3D 散点图等 4+ 的 3D 图表,目前放在 g2-extensions 里面。期望之后能满足 3D 大屏或者科学可视化的需求。
AVA
AVA 是 AntV 旗下的一个智能可视化图表库。今年 AVA 团队和 G2 团队"强强联手",将 AVA 的智能能力通过 G2 的复合 Mark 推出,包含了 Auto 和一系列 Insight Mark,目前放在 g2-extensions 里面。
社区运营
为了让更多开发者看到 G2 栈的能力,以及参与到 G2 栈的建设中,我们也在社区运营方面做了不小的努力。首先是围绕 G2 写了一系列文章,包含自定义教程、算法可视化和数据新闻等,其中的亚运可视化在云栖大会上进行了分享,其余文章在微信平台一共达到了 70w+ 的阅读量。
另一方面,我们也开启了 AntV OSCP 计划:通过发布一系列难度各异的任务,来吸引开发者来贡献。截止到目前,已经有 5+ 外部贡献者参与了 G2 的开发。
国际化
最后,为了使得 G2 能走出国门,让更多国外的用户使用 G2,我们也开始国际化相关的尝试。除了要求代码注释,commit 尽量为英文以外,我们也开始逐步翻译官网的文档,目前已经完成了文档分类下所有文章的翻译,后续会继续对 API 和配置分类下的文章进行翻译。
最后
这就是 G2 栈团队最近一年的主要工作了,也是本届 1122 G2 栈对外的发布内容。欢迎大家使用 G2 栈产品,并且以任何形式来参与开发,让我们一起让它们变得更好,实现我们的愿景:在数据的海洋里获得视觉化思考的能力!