热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AntV/G2Plotv2.0技术架构思考

antv,g2plot,v2,

G2Plot v2 版本,从今年 8 月开始开发,目前差不多已经快 4 个月了,达成:

  • 25+ 常用的统计图表
  • 80% 图表在复杂 BI,LowCode 产品中使用验证
  • 97% 代码单测覆盖率
  • 5+ 积极的社区同学参入

后续我们会继续在几个方面深入:

  1. 按照业务需求去提升,图表丰富度(桑基图、矩阵树图等),并在复杂业务系统去实践和应用
  2. 文档、场景 DEMO,降低使用者的门槛和成本

那么,本文会介绍 G2Plot 2.0 版本开发,从业务到技术架构的一个思考,可能比较混乱,轻喷!


首先自我介绍一下,我是蚂蚁大数据部门的前端,主要负责 DeepInsight 这个 BI 产品的数据分析能力,同时会做 AntV 统计图表 G2,G2Plot 的开发和迭代。

从 BI 的角度出发,我们可以理解一下这一张图。

image.png

数据可视化对于我们 BI 产品来说,非常重要,并且随着时间的推移,数据量的堆积,可视化能力对于任何一个互联网产品,都是非常重要的。

问题

为了描述 G2Plot 新架构的内容,必须先说一下旧架构存在或者带来的问题。

  • 业务问题

去年我们在 G2Plot v1 基础上,做了不少图表体验优化的事情,但是因为代码架构、质量问题,导致我们在业务中只能锁死版本,很难持续迭代。虽然基于 G2Plot,我们解决了很多问题,但是也带来了其他更多的业务迭代问题。

  • 架构问题

G2Plot 架构设计上,没有完全依赖 G2,创建一个图表没有一个明显的模式。这个带来的问题是:

  1. 和 G2 并行发展,不利于积累 G2 的能力
  2. 代码杂乱,新手参入门槛高,难以贡献代码。1 + 1 远小于 2
  3. 稳定性、质量难以保障,维护性问题(这一点也和单测不完备有关)
  • 开放能力问题

业务上使用 G2 做业务定制图表,或者直接用 G2Plot,都存在一个问题是:**如何去做定制、定制的体验优化?**目前部分的优化都是 hack 的方式。急需打破隔离

  1. G2 是否有足够开放的能力,给 G2Plot 或者业务做体验优化?
  2. G2Plot 是否有足够的配置和配置扩展能力,去做业务自定义?

上手简单 和 灵活扩展能力 两者是一个平衡和取舍,对于业务开发的同学来说,这个就显得非常重要了。

架构设计

新架构的几个宗旨:

  • G2Plot 层轻量化

G2Plot 是基于 G2 能力,进行组装成一个一个单独的常用业务统计图表。主要原因有二:

  1. 常用的统计图表使用量超过 80%
  2. 便于 G2 层能力的沉淀和提升,包括布局、图形、交互、动画等能力
  3. G2 基于图形语法,没有图表的概念,无法针对性的图表优化,G2Plot 基于图表分类学,可以进行针对性的处理。
  • 配置式 API 使用方式

继续延续 v1 的配置式的使用方式,一方面是确实可以降低用户的入门和使用成本,另一方面是保证大版本之间的相对兼容性。

整体梳理的架构图如下所示:

image.png

架构解读

本质上,G2Plot 这一层是非常简单和轻量的,它做的事情主要包含有三个点:

Schema & Adaptor

定义不同图形的 schema 配置,然后开发 Adaptor **代码片段,将 schema 配置转化成 G2 的 API。**例如对于折线图:

{ xField: 'year', yField: 'sale', data: [ /* ...*/ ], }

转成 G2 的代码即为:

chart.data(data); chart.line().position(${xField}*${yField});

而这其中,legend、tooltip、axis 都直接延续 G2,不会增加任何其他的概念。

图表分类和定制

针对不同图表的一些体验优化逻辑,例如对于 label 重叠,我们可以针对不同的图形去加载不同的布局函数片段。比如:

  • point-adjust-position
  • limit-in-canvas
  • ...

开放扩展机制

暴露 G2 灵活的自定义能力,提供开发扩展机制。G2Plot 内置的是常用的统计图表,而对于不常用的定制图表,可以方便的通过扩展机制去基于 G2 自定义。

我们将 G2Plot 基于 G2 开发图表的 Adaptor 模式直接开放出来,业务同学可以基于这一个模式去使用 G2 封装定制图表,如果需要给其他业务复用,直接发包,在 G2Plot 的模式上去使用。举个例子:

image.png

以上是一个真实的基于 G2 按照 G2Plot 的模式开发一个 QRCode 图形能力,整体代码 100 行左右。基于这样的模式,参考文档开发自定义扩展图表去进行自定义的业务封装和复用。

最后

目前我们最重要的事情是,让 G2Plot 成为一个业务可用的可视化图表库。主要包含:

  1. 尽可能的通过技术手段,去降低 G2 图形语法的使用成本,同时科普可视化技术知识
  2. 尽可能的提高底层模块的质量、稳定性,不然底层技术模块阻碍业务迭代,甚至给业务代码不稳定因素

欢迎对于可视化技术感兴趣的同学,加入到 G2Plot 后续的持续迭代中,你可以:

  • 文档、DEMO、翻译等相对门槛低的事情入门
  • G2Plot 的内置图表研发和迭代
  • 基于 G2Plot 的开放开放机制,扩展周边非通用图表

感谢!对了,还有项目开源地址:https://github.com/antvis/G2Plot ✨✨✨。更多关于 G2Plot 的文章看这里。


推荐阅读
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 车载T-BOX智能网联终端的设计与实现
    本文介绍了一款基于瑞萨RH850微控制器、TICC2640R2F蓝牙微控制器和高通MDM9628处理器的T-BOX车载终端的设计。该终端通过集成CAN总线、GPS定位、数据加密、蓝牙通信和LTE无线数据传输技术,实现了车辆信息的高效采集与云端通信,支持远程车辆控制和诊断等功能。 ... [详细]
  • ArchSummit深圳2014将于7月18日拉开帷幕,所有讲师已确认,涵盖9个热门话题,共36场精彩报告。InfoQ中文站提供了详细的讲师和报告列表。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 本文由蕤内撰写,明亮公司出品,探讨了日本零售业在数字化转型中的现状与挑战。文章基于与两位在日本的投资人的深入对话,分析了日本零售业为何仍然依赖传统的POS机系统,以及中日两国在品牌建设和数字化营销上的差异。 ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 虽然SQL因其直观易学的语法受到广泛欢迎,但转向Pandas进行数据处理时,初学者可能会感到不适应。本文旨在通过一系列实例,展示如何在Pandas中实现类似SQL的数据查询功能。 ... [详细]
  • 历经两个月,他成功斩获阿里巴巴Offer
    经过两个月的努力,一位普通的双非本科毕业生最终成功获得了阿里巴巴的录用通知。 ... [详细]
  • 应对高并发面试题:构建稳健的系统架构策略
    本文探讨了如何在面试中有效地回答有关高并发系统设计的问题。通过逐步介绍从单机部署到集群化、数据库优化、缓存应用及消息队列的使用,帮助读者建立解决高并发挑战的基本思路。 ... [详细]
author-avatar
手机用户2502923697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有