在项目中,关于前端实现数据可视化的技术选择

2023-09-17 11:53:56

前言

        在项目中,数据可视化以图表、报表类型为主。

需求背景

  • 技术框架是Vue2.x版本,组件库是Ant Design of Vue
  • 能够支撑足够多的图表类型开发
  • 图表大小/位置能够随意变动
  • 图表样式需要支持丰富多样的用户配置
  • 强大、开放的图表语法支持复杂的数据可视化场景
  • 兼顾电脑端和手机端、同时兼顾开发周期和后期维护
  • 版本稳定、社区活跃,方便定位问题和解决
  • 有大屏需求

Ant Design是蚂蚁金服开源的企业级 UI 设计React 组件库。而Ant Design of Vue 是第三方将 Ant Design 的组件库转换为 Vue 组件,便于开发者在 Vue 框架中使用。

Echarts

        特点:配置式开发,也就是绘制图表理论上不需要编写代码(除了初始化),只需要提供一个配置对象即可,所有的内容都可以通过配置调整。

        优点:

  • 百度开源、开箱即用、功能强大、社区活跃、文档丰富、版本迭代积极
  • 衍生开发、配置丰富、扩展丰富(可以画出各种炫酷效果makeapie echarts社区图表可视化案例
  • 支持按需求打包(echarts.js官网提供了在线构建的工具,可以在线构建项目时,选择项目所需要使用到的模块,从而达到减小JS文件的体积)
  • 支持中国地图功能

        缺点:

  •  PC端大数据量体验较差
  • 移动端缺陷凸出(卡顿、部分PC功能不支持、触摸事件鬼畜等)
  • echarts.js的体积较大(一个基础的echarts.js都要400K左右,相对于D3.js和hightcharts.js来说都是比较大的)
  • echarts.js的可定制性差(说到echarts.js的定制性差,其实不止是包括echarts.js/hightcharts.js也是如此,因为这一类型的数据可视化框架主要是高度的进行分装,所以你在使用的时候只需要设置一下配置就可以了,但是如果是出现了要绘制配置中不支持的图表怎么办,那么你就只能放弃,尝试着使用其他的框架了)
  • 高度封装的组件库,没办法拿来再二次封装

AntV

        AntV 是蚂蚁金服开源的数据可视化解决方案。基于项目的业务需求,我考虑了以下Antv旗下三个开源库:

  •         G2
  •         G2Plot
  •         Ant Design Charts

        我们先讲讲三者的区别:

        G2

         G2 作为底层依赖,使用了图形语法。

         可以看到它的实现都是通过函数风格式、声明形式的 API 和组件化的编程范式来完成的:

         优点:功能强大

         缺点:上手难

        G2Plot

        全面依赖 G2,G2Plot 层仅仅是基于 G2 强大的图形、交互、事件、动画能力,一图一做的扩展不同的常见业务图表,开箱即用、易于配置。

        优点:上手简单,配置简单

        

        Ant Design Charts

        Ant Design Charts 是 G2Plot 的 React 版本,基于 React 封装了 G2Plot,无需感知destroy()、update() 等函数,只需关系 data 和 config,功能和 G2Plot 保持一致。

        新版本的Ant Design Charts甚至不局限于 G2Plot,目前已经在 G6 的基础封装了部分流程图、组织架构图等,后续还会接入 L7 (地理可视化) 等图表库。

        总而言之,G2Plot和Ant Design Charts可以理解为基于G2的实现。

        那么蚂蚁金服这几套技术框架的优缺点是啥?

        G2优点:自由度较高:由可视化理论做基础,没有类似 Echart 的 chart 概念,可用“可视化语法”绘制想要的图表,非常灵活。

        例如一根堆积柱形图的坐标系由笛卡尔坐标系改为极坐标系,堆积柱形图就变为了圆环图。

        代码复用率较高:因其有一套完善的可视化语法,所以团队或公司可根据自己的 UI 需求,用 g2 做底层库,封装自己的 charts 库。

        缺点:产品成熟度一般、社区也不活跃、大屏需要定制化开发,有一定开发门槛;组件库需前端编码实现数据绑定,若需拖拽式等功能需要额外开发(没有暴露resize方法);最重要的是很难!

        G2Plot和Ant design Charts优缺点与Echarts差不多。

HighCharts

        语法也是和 ECharts 差不多的配置式。

        它的优点是它有详细的文档,示例和详细的 CSS,产品稳定性好,缺点是商用版付费

        这个付费直接让我pass了它

D3

        非常著名的交互式绘图引擎,也算是偏底层绘图的库,类似于 G2

        开源的JavaScript函数库。很多其他的库都是基于它所开发,功能十分强大,灵活性也高,支持 HTML、SVG 和 CSS。

        优点:相当于武侠世界里的绝世内功,学会了它,就可以使出十八般武艺。各种定制化的可视化图表都可以轻松完成。

        缺点:难。需要 web 技术、可视化理论、数学逻辑。

        低版本的IE浏览器中图形无法正常显示

最终采用

        要商用,首先淘汰了HighCharts

        没有可视化开发基础。淘汰了D3和G2

        用的Vue不是React,淘汰了Ant Design Charts

        因为需要快速上手、绘制的图表没有夸张的个性化定制,Echarts和G2Plot进入决赛

        考虑到版本稳定和社区活跃,同时翻阅了Echarts的扩展画廊,发现Echarts还是有蛮多花里胡哨的实现,最后选择了Echarts

        但是移动端的问题最后还是踩坑了,但是我最后想出解决的方法,请看本专栏的另外一篇推文

更多推荐

Node.js(初学者)

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录必备条件在VisualStudioCode中试用NodeJS使用Express创建自己的第一个NodeJSWeb应用尝试使用Node.js模块必备条件在Windows或适用于Linux的Windows子系统上安

FreeSWITCH 1.10.10 简单图形化界面8 - 讯时FXO网关SIP注册公网IPPBX落地

FreeSWITCH1.10.10简单图形化界面8-讯时FXO网关SIP注册公网IPPBX落地0、界面预览1、创建一个话务台2、创建PBX分机中继并设置呼入权限3、设置呼出规则4、设置分机呼出权限5、设置FXO网关相关信息6、设置FXO网关中继线路呼入号码7、设置FXO网关呼叫路由(呼入及呼出)8、查看SIP中继状态F

室内探索无人机,解决复杂环境下的任务挑战!

前言室内探索无人机是一种专为在室内环境中进行任务的无人机系统。相比传统的人员部署,室内探索无人机具有更高的灵活性和机动性,能够在复杂的室内环境中执行任务,用于未知环境的探索和特定目标的搜索。为完成无人机室内搜索与识别等复杂任务,阿木实验室推出了一套全新的室内无人机探索系统。该系统集成了自主定位、视觉SLAM模块、路径规

使用 Sahi 实现 Web 自动化测试

目录Web测试背景Sahi的特性和优势:基于上下文的页面识别机制:隐式页面加载响应等待机制:Sahi的工作原理:第一步:录制第二步:精炼脚本第三步:回放Sahi是TytoSoftware旗下的一个基于业务的开源Web应用自动化测试工具Sahi运行为一个代理服务器,并通过注入JavaScript来访问Web页面中的元素。

MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模

开头还是介绍一下群,如果感兴趣PolarDB,MongoDB,MySQL,PostgreSQL,Redis,Oceanbase,等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系liuaustin3,在新加的朋友会分到2群(共1300人左右1+2+3+4)3群即将突破400(目前3

电力系统直流潮流分析【N-1】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码及文档讲解💥1概述该程序接受一个感受矩阵B=[NxN]和注入功

day28IO流(字节流&字符流)

1.IO概述1.1什么是IO生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为

Pikachu XSS(跨站脚本攻击)

文章目录Cross-SiteScriptingXSS(跨站脚本)概述反射型[xss](https://so.csdn.net/so/search?q=xss&spm=1001.2101.3001.7020)(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss-盲打xss-过滤xss之ht

Flutter 中的单元测试:从工作流基础到复杂场景

对Flutter的兴趣空前高涨——而且早就应该出现了。Google的开源SDK与Android、iOS、macOS、Web、Windows和Linux兼容。单个Flutter代码库支持所有这些。单元测试有助于交付一致且可靠的Flutter应用程序,通过在组装之前先发制人地提高代码质量来确保不会出现错误、缺陷和缺陷。在本

【CSS3】CSS3 动画 ⑤ ( 动画速度曲线 | 设置动画步长 | 动画匀速执行 | 动画分 2 步执行 | 使用动画步长实现打字机效果 )

文章目录一、动画速度曲线设置二、代码示例-动画速度曲线设置1、代码示例-动画匀速执行2、代码示例-动画分2步执行三、代码示例-使用动画步长实现打字机效果一、动画速度曲线设置CSS3样式中,设置动画速度曲线的属性是animation-timing-function属性;animation-timing-function属

RabbitMQ编程模型

"HelloWorld"在本教程的这一部分中,我们将用Java编写两个程序;发送单个消息的生产者和接收消息并将其打印出来的消费者。我们将忽略JavaAPI中的一些细节,专注于这个非常简单的事情,以便开始。这是一个“HelloWorld”消息传递。在下图中,“P”是我们的生产者,“C”是我们的消费者。中间的框是一个队列-

热文推荐