个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈

简介

F2,源于 Fast & Flexible 两个单词首字母,是 AntV 家族中专为移动端定制、开箱即用的可视化解决方案。已经广泛应用于支付宝钱包、淘票票、钉钉、微信小程序等各种移动端场景,每日有几千万的用户在使用。在 F2 的 3.6 版本发布之际,让我们一起来回顾一下 F2 的发展。本文的内容有:

  • F2 的前生
  • 1.0 时代 -- 诞生
  • 2.0 时代 -- 发展
  • 3.0 时代 -- 成熟
  • 4.0 时代 -- 面向未来

F2 的前生

在阿里/蚂蚁集团内部在 2015 年之前并没有针对移动端的图表,在 2014 年时蚂蚁前端开发了一套移动端的框架 AnimaJs(AntD Mobile 的前身),我在参与 AnimaJs 组件开发的同时,尝试性的开发过一套图表 Anima-Charts,实现了常见的图表(折柱饼)的功能。受限于当时的移动端的环境,andorid 版本对 canvas 的支持非常不好,所以这个版本只应用在少数几个业务上,并没有得到广泛的使用。

1.0 时代 -- 诞生

时间推进到 2015 年底,支付宝钱包的业务飞速发展,一些资金展示需求开始出现。当时钱包对代码大小要求非常严格,一个应用包不能超过200k,他们找到我们提供图表的支持的时候,社区上找不到合适的移动端图表,我们开始基于 G2 开发一款针对于移动端的图表库,当时起名为 G2-mobile。
G2-mobile 作为 G2 的精简版本应运而生,本质上是图形语法的精简实现。这个版本开发和上线周期非常短,仅花了不到 2 个月的时间就在钱包上上线。其特色就是小,非常小的一个版本,压缩 (非 zip)后仅有 40k (zip 后 12k)。另一个特色(贬义)是非常难用,因为小所以很多功能缺失:坐标轴刻度需要自己计算、缺少动画、不支持交互,仅仅支持 3 种常见图表(折、柱、饼)。

V1.0 版本正式发布于 2016 年 3 月,由于没有设计师的参与,风格非常程序员化。这个版本的架构非常简单,本质上就是 G2 的一个精简版本,架构同当时的 G2 1.0 一致:

可以通过架构图看出这个版本小的原因,也可以看出缺少功能:

  • 底层没有独立的绘图引擎,绘图代码不超过 100行。
  • 没有事件机制、动画机制。
  • 也没有统计模块,因此不具备 G2 自由组合出各种图表的能力。

这个版本初步满足了业务上的要求,保证了精简的最小图表集合,也满足了钱包上一些展示的需求。但是随着钱包业务的发展,对图表类型和功能的要求越来越高,G2-mobile 面临新一轮的升级。

2.0 时代 -- 发展

V1.0 版本仅仅延续了 4 个月,2016 年 7 月我们就发布了 V2.0 版本,这个版本除了增加新的图表类型(面积图、k线图)外,还支持了坐标轴 ticks 的自动计算、动画和辅助元素。为了保持代码的大小,所有的模块都进行了分包,可以按需引用。其架构有较大的调整,我们将一些同 G2 共用的模块提取成 G2-Core ,其架构如下:

由于 G2 和 G2-mobile 的开发人员都是一批人,所以采用这套架构没有什么问题。但是由于两者的上层实现有一些差异,导致 G2-Core 里面有一些杂糅的代码,带来了一些维护的成本:

  • 更新包时,两个框架都会受到影响。
  • 需要将 G2 的一些代码模块拆分的更细,例如数据处理模块,要保证 G2-mobile 仅加载自己需要的方法。

这个版本在视觉设计上依然没有改进,需要业务方自己进行设计,开发人员通过更改配置来实现,其结果依然是是满足需求。

3.0 时代 -- 成熟

2017 年有专门的设计师团队加入 AntV,AntV 的所有产品都有了脱胎换骨的变化。这时候 PC 端的图表要求和移动端的图表要求的差异已经越来越清晰:移动端的图表定位于对性能、大小敏感的移动端场景,主要是面向 C 端用户的各种 APP。钱包对图表的要求也更高,基金、理财和账单等场景已经不满足现在 G2-Mobile 的功能和体验,因此我们进行了设计、架构的全面升级,由此 G2-Mobile 更名为 F2。

F2 3.0 于 2018 年 4 月正式发布,这个版本持续的时间非常长,发展到现在已经有 6 个版本,逐渐实现了设计改造、动画优化、移动端交互和多平台支持,同时基于实践我们提供了多个成熟的解决方案。我们将 3.x 的特色总结如下:

设计的提升,图表类型的丰富

动画和交互的提升

多平台支持

  • H5 端支持所有的图表、动画和交互
  • 支持支付宝小程序和微信小程序,一些 HTML 的组件使用存在限制
  • 支持 node 端渲染,可以在后台生成图表,通过图片加载到页面

移动端的解决方案

AntV 架构演进-F2 篇相关推荐

  1. dataset的去重计数 g2_AntV 架构演进-G2 篇

    作者: 蚂蚁可视化团队 简介 G2 自 2014 年以来已经发展到 4.0,回顾过去,我们发现每一个版本都是一笔记忆,当我们队每个版本的架构进行梳理,分析每个版本背后的思考时,这些记忆就转换成了财富, ...

  2. 消息提示的架构演进-理论篇

    本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/685995,如需转载请自行联系原作者项目是一个互联网应用. 假设项目有不同的用户群 ...

  3. 集群调度框架的架构演进之路

    http://www.infoq.com/cn/articles/scheduler-architectures 编者按 集群架构是现代数据中心非常重要的组件,在最近几年中有长足发展.架构也从单体式设 ...

  4. 从新手到架构师,一篇就够:从100到1000万高并发的架构演进之路

    1.引言 本文以设计淘宝网的后台架构为例,介绍从一百个并发到千万级并发情况下服务端的架构的14次演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知.文章最后汇总了一些 ...

  5. 第三篇:稳定性之借风险之力驱动架构演进

    架构设计首先依据是基于业务需求,其次架构设计是经过系统性地思考, 权衡利弊之后结合现有资源约束下的最合理决策,最终明确的系统骨架: 包括子系统, 模块, 组件. 以及他们之间协作关系, 约束规范, 指 ...

  6. 1000K流量架构演进之术-吐血整理篇

    微信订阅号:魔术师耿 我是一个互联网公司的螺丝钉,不过是个大个儿的: 魔术师耿 百万流量架构演进之术 沈剑老师的方案 负责前公司的技术侧的开发管理工作时,大体实践路子也是这么来的.但是能在15分钟把他 ...

  7. 调度框架学习笔记(3)—— 集群调度框架的架构演进过程

    本章是 The evolution of cluster scheduler architectures 文章的学习笔记.这篇文章讨论了这些年调度架构是如何发展的以及为什么会这样发展. 首先介绍一下这 ...

  8. 世界最优秀的分布式文件系统架构演进之路

    来自:架构之美 前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现 ...

  9. 从架构演进的角度聊聊Spring Cloud都做了些什么?

    Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...

最新文章

  1. oracle+标记要,oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法
  2. 糖原代谢疾病行业调研报告 - 市场现状分析与发展前景预测
  3. JSP程序设计 第2版 pdf
  4. 虚拟机访问服务器文件夹,浅析CentOS8虚拟机访问Windows10主机文件夹方法
  5. python全栈开发工程师_老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)...
  6. keil5 调试不进主函数一直卡在0x1FFFF3B2 F8D01808 LDR r1,[r0,#0x808]
  7. 【考研政治】1. 导论和基本哲学问题
  8. [原]极域电子教室3个没被发现的bug(V6 2007)
  9. Android登录 之 Twitter登录
  10. 和平精英灵敏度分享码服务器没有响应,和平精英灵敏度分享码怎么弄 灵敏度分享码怎么用...
  11. 量化投资python_量化投资与python
  12. 舒老师AK的hu测 T2. LX还在迷路(线段树+等差数列)
  13. 计算机研究生毕业论文提纲,计算机硕士毕业论文提纲范文
  14. python移动窗口函数_设置窗口图标和移动窗口
  15. 四川大学计算机科学研究生,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示(全日制)...
  16. 【转】SD卡、MiniSD卡、MicroSD卡大小与引脚分布
  17. 怎么设置360主页的html,怎么使用360安全卫士设置浏览器主页
  18. IsoBuster Pro复制加密光盘(内容隐藏光盘)
  19. STEAM的前世今生
  20. matlab代码用python替换_用python替换Matlab

热门文章

  1. 蒲公英的约定在线试听,蒲公英的约定歌词,下载
  2. 图片格式在线转JPG怎么做?教大家在线格式转换方法
  3. 详解Java的protected访问权限
  4. GoLang之数据类型byte、rune
  5. CShape(.NET) 面向对象常见面试题
  6. svn更新报错:svn:Checksum mismatch while updating;expected: '9a8c8856b74e4545bf2e52e2b54b23a6', actual: '
  7. 小程序报错:(“ errMsg “:“ navigateTo : fail can not navigateTo a tabbar page “}
  8. 老中医的偏方(看了不白看)
  9. 小程序生成海报携带参数-云函数生成二维码
  10. VC使用TerminateProcess结束进程实例