axureux中后台管理信息系统通用原型方案 v2_前端公共图表数据大盘方案

作者 | 马一文

d868f342dd51c467db69e25de22a9068.png

程序员中的一种,偶尔吟湿作对,润滑万物 ——子慕大诗人

前言

前端常常会在的业务中后台开发数据统计图表,对于类似 Echarts 这种配置性极强的库,需要花费很多时间查看文档, 一个项目中统计图表大多情况下只占少部分,平时写的不多容易忘记配置,重复开发的效率低。产品经理对于图表的设计个性化明显(今天看到一种样式的图表觉得也挺好,然后就想照搬到自己业务之中),同类型的图表可能样式不一,代码又得重新写。总归给人的感受就是开发效率低,产品设计效率低。

在文章的开始我们先来看看一个前端平常在开发各种数据图表时,可能经历的过程,以 Echarts 为例:

  1. 打开 echarts 官网。

  2. 查看实例界面,参考需要实现的类似的图例,找到合适的实例拷贝需要的实例代码。

  3. 打开业务项目复制代码,发现需要安装依赖,也许通过 html 中 script 引入,也许通过模块方式引入(这种情况下可能还需要配置一下 webpack 解决一些依赖优化的问题)。

  4. 发现细节上和 ui 或者产品原型不符,开始查找文档配置,比如:轴线颜色,刻度颜色,内间距,提示器,文案模版等等。

  5. 做第二个图表的时候,发现和第一个类似都是折线图,但是这次是一个图中有多个折线,ui 在细节上又发生了一些变化,然后重复上面步骤 4。

  6. 一段时间以后,另一个业务项目,再次需要做数据图表。这个时候,想到以前做过,然后找到老项目对比图表,拷贝类似的代码,进行修改,发现细节不一致的地方又开始步骤 4。

因为每次做的图表不一样重复步骤 4、5 几次以后,耗费的时间已经很多了,加上配置代码本身就比较多,2、3个图表就能让代码上一百行。经历过几次这样的折腾以后,可能稍微熟悉了一下 API,但是仍然会觉得每次开发的效率好低。于是就有了今天所做的分享,下面进入正文。

方案

针对公司各个业务中后台项目开发数据统计图表的应用场景,为了解决以上两个效率问题,我想到了通过下面两个方向来做处理:
  • 抽象代码减少应用代码量,傻瓜式配置避免每一个开发者花费时间重复阅读文档 —— 提升开发效率。
  • 统一图表使用风格,减少一定程度个性化,提供图表界面和对应组件代码 —— 提升产品设计效率。
简单来说,就是封装公共图表组件供团队使用,约定统一图表样式,提供可视化界面文档。优点:
  • 只关心更核心的配置、组件抹去配置细节、提升开发效率。
  • 提升产品设计效率、省去设计选择的时间。
缺点:
  • 缺少一定灵活性(抽离常用部分,牺牲灵活性,多用共性)。
  • 公共图表组件开发需要投入成本 。

实施

JS 组件库

目的和方向已经明确,我们可能会第一时间想到,那肯定就是基于三方图表库做一次组件封装,通过 npm 安装依赖,最后再写好文档就行了。现在称它为 JS 组件库方案,那我们来考虑考虑此方案组件库的一个实现和使用流程,以 Echarts 为例:
  1. 新建一个代码库,安装 echarts 依赖。
  2. 新建组件(比如一个折线图组件)。
  3. 封装组件参数,回调方法等。
  4. 如果要兼容 vue,angular,react,组件代码需要写三套兼容,或者通过代码优化和构建处理,一套代码生成多种框架组件。
  5. 定版本,发布组件库。
  6. 写一个网页文档并在网页上展示实例。
  7. 业务系统安装组件库使用。
  8. 如果代码需要升级或者修改 bug,需要重新修改组件库,并发新版本,业务系统重装依赖。
下图为此方案的示意图:

fab33bc836f06b49968a66debe6350c9.png

但是以上的方案带来了一些麻烦和问题:
  • 可能需要兼容多套框架,组件库开发成本增加。
  • 修改 bug 和库升级都需要发版本,每一个业务系统都有可能需要在一个版本之后更新依赖,维护成本增加。

Iframe 方案

而我最初的下手点是通过 iframe + postMessage 来实施了这套方案,下面介绍一下此方案。此方案最终把一个个组件输出为一个静态的页面,通过 iframe 的方式,嵌入到我们的业务系统之中,通过 postMessage 来传递数据、配置和事件绑定。先介绍一下大致开发和使用流程,而后对其优劣做分析。
  1. 新建代码库,安装 echarts 依赖。
  2. 新建页面组件(比如一个折线图组件)。
  3. 封装组件参数,回调方法等。
  4. 打包输出为一个个静态资源页面,发布到静态资源服务器。
  5. 写一个网页文档并在网页上展示实例。
  6. 业务系统不需要安装任何依赖,通过 Iframe 配置 url 引入组件,通过 postMessage 发送配置和数据。
  7. 如果代码需要升级或者修改 bug,重新修改组件库,打包更新静态资源,业务系统不需要重装依赖直接访问就更新。如果存在变化比较大的类似组件,可以考虑输出新版本,比如老版本是 xxx.com/v1/bar.html,新版可以定义为 xxx.com/v2/bar.html,互不影响。
下图为此方案的示意图:

20a6c82d4d01bba9f618613ba788f0c5.png

下面我们来对比一下两个方案:

c777292d03027f815811d948244bb95d.png

优化

稳定性

Iframe 有个比较需要特别谨慎的地方就在于其稳定性上的问题,由于所有业务系统的图表都指向到公共图表项目,都需要对其进行访问,如果出现了问题,那影响是很大的。由于业务系统是分散的,我们在发布新的公共图表项目版本的时候,需要进行一轮测试,测试新版本,首先需要满足的是不影响已有业务系统。于是,针对这两个问题,我们一方面需要严格保障公共图表项目的代码质量,在代码合并权限控制和人为 review 上需要格外重视;一方面可以同样通过 Iframe 的方式,在公共图表的文档网站页面加入一个页面菜单、嵌入所有中后台业务系统的相关页面。由于我们中后台统一接入了公司内部开发的 sso 权限登录系统,因此可以根据当前的登录用户和他的权限,看到他所能够看到的业务系统的图表统计相关的页面。那我们给一个测试用户配置所有业务的权限,就能通过公共图表系统本身查看到所有业务相关界面,以此来做测试验收。也因为如此,公共图表项目本身不仅提供了页面组件给业务中后台系统使用,也同时集合了所有业务系统的数据统计界面,变成了一个真正的数据大盘。到此我们的方案就是一个完整的公共图表数据大盘。

资源大小

在静态资源大小方面,每一个 html 组件,只引入了一个三方图表库和组件本身的一小段 js 代码,并没有引入任何框架,尽可能的减少文件大小。

迭代原则

首先做封装是有成本的,并不是一开始我们就写好所有的组件库,而更多应该是在开发需要某一种图表时,再考虑进行封装,封装的同时不仅要考虑当前版本使用,也要尽量考虑通用性和后期其他项目使用的情况。

纯个性化配置

当然很多情况下需要个性化配置我们的图表,既然当前已经有了公共系统,如果遇到个性化的图表,难道又要让业务系统去安装 Echarts 依赖,然后以旧的模式写配置吗?所以,在公共图表项目内部也提供一个纯个性化配置的图表,也就是没有任何多余封装的组件,配置信息完全需要业务方写好,组件直接调用生成,不做任何处理。这样我们依旧不需要管理依赖,仍然也只是关心配置。

界面优化和约定

如何统一用什么样式的图表,这需要产品、设计和研发一起商量做好约定,这块是需要投入成本的。

多图表库支持

上周在公司内部分享的时候,被问到可以支持多库吗?确实不排除后期需要多库的情况,或者某些图表库不支持我们想用的功能,因此在代码架构配置中做了处理,已经支持多三方图表库存在的情况,具体内容可以看 github 仓库。

Iframe 方案可能会被吐槽的一些问题

  • 阻塞父页面加载:由于单页面框架内使用 Iframe 大部分都是在框架本身生命周期中创建节点,所以并不会阻塞业务本身。
  • 安全问题:因为我们的图表项目是自己写的,并且是纯静态资源,没有接口的输入,也没有任何业务,因此没有任何攻击的价值。
  • 性能低下:因为在 PC 端这样的场景之下,Iframe 本身会带来的性能问题是微不足道的,并且一个界面之中的图表大部分情况下是不会超过 10 个的,即便有 10 多个,也都并不会导致卡顿。配合上缓存策略,图表的加载实际也很快。

代码展示

业务代码在使用组件时,只需要大致下面这些代码,不需要安装任何依赖。

29abab4b7cf76ccf092f6fac06e872d2.png

7e19f6435193a75d28f1ab72e0ad58b2.png

仓库演示

https://dashiren.cn/public-chart/dist/index.html

仓库地址

https://github.com/zimv/public_chart

结语

基于我们需要解决的问题,选择哪一种方案,其实都可以,只是刚好我偏向于 Iframe。从发现问题到解决问题,从提出想法到实施落地,以上便是全部内容,希望能给大家带来一些启发,今天的分享就到这里。

全文完


以下文章您可能也会感兴趣:

  • Mysql redo log 漫游

  • 一个 AOP 缓存失效问题的排查

  • 小程序开发的几个好的实践

  • Web 开发打印总结

  • 小程序中 Redux 的使用

  • 数据可视化过程不完全指南

  • 小型大写字母的用武之处

  • React Native 项目整合 CodePush 完全指南

  • 震惊!JavaScript 竟然可以类型推断!

  • ConcurrentHashMap 的 size 方法原理分析

我们正在招聘 Java 工程师,欢迎有兴趣的同学投递简历到 rd-hr@xingren.com 。

de8541bfe82dad8c3b8ab7c2501b84cf.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从程序员到技术总监,分享10年开发经验

在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有10年的时间了,在这里在下想凭借自己的亲身经历,与大家一起探讨一下。 明确入…

计算机风险评估管理程序,第5章 信息安全风险评估实施流程

《第5章 信息安全风险评估实施流程》由会员分享,可在线阅读,更多相关《第5章 信息安全风险评估实施流程(25页珍藏版)》请在人人文库网上搜索。1、第第5章章 信息安全风险信息安全风险评估评估 实施实施流程流程 赵赵 刚刚 信 息 安 全 管 理 与 风 险 评…

机器学习:算法模型:决策树

原文链接:https://www.cnblogs.com/wenyi1992/p/7685131.html 【基本流程】 分类决策树的核心思想就是在一个数据集中找到一个最优特征,然后从这个特征的选值中找一个最优候选值(这段话稍后解释),根据这个最优候选值将数据集分为两个子数据集…

PDU

协议数据单元 PDU(Protocol Data Unit)是指对等 层次 之间传递的数据单位。 协议数据单元(Protocol Data Unit )物理层的 PDU是 数据位 (bit), 数据链路层 的 PDU是 数据帧 (frame),…

Haproxy+Percona-XtraDB-Cluster 集群

Haproxy介绍 Haproxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点&…

mac安装和卸载mysql_基于centos7系统卸载rpm安装的mysql

概述前面有介绍了怎么用rpm包去安装mysql,那么如果我们要卸载的话可以怎么弄呢?下面介绍下卸载mysql的流程。环境:centos7.31、 检查是否安装了MySQL组件。# rpm -qa | grep -i mysql2、卸载前关闭MySQL服务systemctl stop mysqld3、收集MySQ…

(转)Linux服务器磁盘空间占满问题

转自:https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助。今天下班某电商技术部leader发现个问题,说他们服…

计算机组成原理2套题,计算机组成原理试卷及答案2套.doc

计算机组成原理试卷A一、 选择题(每小题2分,共30分)1. 下列数中最小的数是______。A.(100100)2 B.(43)8 C.(110010)BCD D.(25)162. 计算机经历了从器件角度划分的四代发展历程,但从系统结构上来看,至今绝大多数计算机仍…

改变您一生的90/10原理

了解并运用由Stephen Covey发现的90/10原理,您的一生或许会有所改变,至少,您对待事情的态度会与以前不一样了。 什么是90/10原理?即在您的一生中,只有10%的事情您无能为力,而90%的事情都在您的把握之中。 我…

透明网桥

所谓“透明网桥”是指,它对任何数据站都完全透明,用户感觉不到它的存在,也无法对网桥寻址。所有的路由判决全部由网桥自己确定。当网桥连入网络时,它能自动初始化并对自身进行配置。 透明网桥以混杂方式工作,它接收与…

vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法

首先,vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解决了我用阿里云oss上传图片前的一头雾水。 该大神文章里有写github地址,里面的2.0分支采用vue2.0实现,只不过这个上传图…

iphone11右上角信号显示_苹果iOS11信号强度的标志变了意味着什么?

原标题:苹果iOS11信号强度的标志变了意味着什么?在iOS 11测试版中,苹果将状态栏中表示 LTE信号强度的5个小圆点换成了4 个竖状条。从 iOS 7 到 iOS 10苹果就一直使用小圆点标志信号强度设计,而这次的改变也意味着范围的变化。这到底是什么意…

计算机二级access选择题技巧,计算机二级access考试注意事项及解题技巧策略

计算机二级access考试注意事项及解题技巧策略2017年计算机考试将至,今天yjbys小编为大家带来了计算机二级access考试注意事项及解题技巧哦!快点行动起来吧~考试注意事项1.考试时间:120分钟(即2小时)2.考试类型:上机操作 (总分100分&#xff0…

【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

题目描述 求一张有向图的强连通生成子图的数目对 $10^97$ 取模的结果。 题解 状压dp容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum[i]}$ 减去不为强连通图的方案数得到强连通图的方案数,其中 $sum[i]$ 表示点集 $…

交换机实现虚拟局域网

但由于它是逻辑地而不是物理地划分,所以同一个 VLAN内的各个工作站无须被放置在同一个物理空间里,即这些工作站不一定属于同一个物理LAN网段。一个VLAN内部的广播和单播流量都不会转发到其他 VLAN中,即使是两台计算机有着同样的网段&#xff…

产品与项目

产品和项目到底有什么区别,扩展开说,做产品和做项目最大的不同在哪里?产品经理和项目经理(都是PM,有时候自己都搞不清说的哪一个)职责的不同在哪里?一直困扰了我很长时间,直到2007年…

python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...

经典递归汉诺塔问题背景故事传说印度某间寺院有三根柱子,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。…

Hello This Cruel World!

第一天,已经成为了半年的OIer,仍然是个蒟蒻,希望以后能够变强! 在OJ和博客的常用网名: TimeTraveller ->洛谷 VictoryCzt ->csdn,cnblog等 Czt Czttt czt ->OJ CrazyTea CrazyTeaMajor 游戏,QQ…

计算机系统的部件名称作用,电脑配件与每个配件作用详细完整的解释

电脑各配件的具体功能和特性说起来很长,先简单介绍一下。一台个人台式电脑的主要配件有:1.主板:也叫母板,是连接CPU、内存、AGP等电脑配件的最主要最基本的载体,主板的结构类型决定电脑各配件的结构和类型,…