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.pswp.cn/news/453127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453127.shtml
英文地址,請注明出處:http://en.pswp.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等電腦配件的最主要最基本的載體,主板的結構類型決定電腦各配件的結構和類型,…