🧨性能強悍的TS 版G6 來了,給您拜個早年🧨

blank

🧨性能強悍的TS 版G6 來了,給您拜個早年🧨

AntV G6 是一款開源的圖可視化引擎,專注於圖可視化及圖分析領域。
歡迎關注和star我們的GitHub: github.com/antvis/G6
官網: g6.antv.vision/zh/

2020 年1 月16 日,新年代的G6 3.3-beta 來了!這次,G6 主打性能提升與TypeScript 化,一起來看看G6 新特性吧!

如何升級遷移?請看TS G6 3.3-bata升級指南

性能upup

作為圖可視化框架,G6 所展示的數據一般具有數據量大、圖元數量多、動態更新頻繁的特點,Canvas 渲染便成了G6 最耗性能的痛點。

為解決這一問題,我們在G6 3.3-beta中全面升級了底層渲染引擎:使用局部渲染自動渲染延遲渲染自動裁剪機制,替換了原先動態更新圖上單個元素便需要全局重繪的機制。

這一改進大大提升了交互體驗,特別是在大數據下節點/邊的高亮、選中、拖拽等交互。

在有10000 個節點的圖上,拖拽交互時的性能對比圖如下(每個節點帶有一個文本,即一張圖上具有20000 個圖元。且文本消耗性能巨大)。

测试环境:Chrome on MacBook Pro with 2.5 GHz Intel Core i5, 16 GB 2133 MHz LPDDR3
blank
(左)G6 3.2 及之前的版本,拖拽卡頓,延遲嚴重;(右)G6 3.3-beta,稍有拖尾,跟隨順滑。

在該圖上對一個節點進行拖拽,可以看到在G6 3.2 及之前的版本中(左圖),拖拽十分卡頓,被拖拽節點基本無法跟隨鼠標,交互體驗極差。
升級後的G6 3.3-beta (右圖)雖然在如此大數據量下的拖拽稍有拖尾現象,但被拖拽節點能夠順暢跟隨鼠標。

下圖記錄了G6 升級前後性能隨節點數量增加而變化的情況,藍色、綠色折線分別代表了升級前後的性能折線。

测试环境:Chrome on MacBook Pro with 2.5 GHz Intel Core i5, 16 GB 2133 MHz LPDDR3
blank
(左)節點總數與渲染幀率的關係;(右)節點總數與CPU 使用率的關係。

上左圖展示了隨著圖上節點總數(每個節點仍然帶有一個文本,因此圖元數量是節點總數的兩倍)增加,拖拽單個節點時畫布的幀率變化。
在7000 個節點的圖上,升級前的G6 幀率已經小於2,基本無法正常交互;而升級後的G6 在17000 的圖上仍然有較高幀率。

上右圖展示了在拖拽單個節點時,節點總數與CPU 佔用率的關係。
G6 3.2 版本中當節點數為3000 時,CPU 佔用率就達到100% 了。而升級後的版本中,節點為3000 時,CPU 佔用率不到75%,當節點數為17000 時,CPU 佔用率也沒有到100%。

擁抱TypeScript

在TypeScript 大行其道,逐漸成為前端開發首選的今天,G6 也不願被時(大)代(家)拋棄。 G6 3.3-beta 版本中,我們使用TypeScript 完全重構了所有代碼,完善的類型定義及錯誤提示能夠極大地提升研發人員的開發效率。

blank

更自由的元素與佈局配置

  • 除了原先支持的節點關鍵圖形的樣式更新外,新版本支持了內置元素上其他圖形的動態增刪及樣式更新:
blank
(左)動態增刪label、linkPoints、icon;(右)動態更新卡片節點的副文本、增刪icon。
  • 更自由穩定的佈局配置:
blank
(左)Grid 佈局支持指定行列數;(中)Radial 佈局支持指定同層節點聚類排布(右)Dagre 佈局支持自動計算折線控制點,修復節點順序敏感問題

更豐富的構建產物

G6 3.3 版本中,我們提供多種構建產物:

  • es:支持es5 的產物;
  • lib:支持commonjs 的產物;
  • dist:支持UMD 的產物。

測試覆蓋率upup

本次升級,我們進行了較為全面的測試:

  • 行覆蓋率> 95%;
  • 分支覆蓋率> 87%

立足當下

回顧剛剛過去的2019,G6 進行了架構的全面升級,迎來了全新的G6 3.x。並從3.0 一步一腳印地升級到了3.3-beta。我們也真正明確了G6的定位:圖可視化引擎

blank
提升Layout、組件、動畫的地位,獨立成機制,大大提升易用性和功能;針對分析場景增加了狀態管理機制,在圖分析場景下非常易用;移除了錨點和控制點機制。專注於圖展示與分析,不再重點關注重編輯場景。

2019,也是G6 更加開放的一年。 G6 團隊從一個人的小作坊變成了5 人+ 的工作小組;從1-2 個核心開發者變成了10+ 人貢獻代碼;從社區隔離變成了有一個近1000 人的交流群。

G6 不再僅僅是一個開源代碼庫,它將會成為一個更加開放、更加包容和更加多元化的組織。

特別鳴謝

感謝所有G6 的用戶,有你們的反饋和督促,G6 才能更好地發展下去;特別感謝為G6 貢獻了代碼的各位貢獻者,正是有了你們的無私奉獻,G6 才會更有信心持續地發展下去。

再次特別感謝對G6 貢獻了代碼的各位貢獻者:
下面僅列舉了在GitHub 上對G6 3.x 的貢獻者用戶,排名不分順序。
elaine1234Shu-JIhuxiaoyuzxc0328Echo009mage3k
Deturiumscaletimesafc163crystalwmbzhangzjuhstarorg
vellengsgaolilxfuspengjieEarlyHzhengbigbigAnderson-Liu
fanlinqiangCyrilszqhujiulong

結語

G6 3.3-beta 版本的發布,預示了我們又邁出了新的一步,但這也僅僅只是開始。 G6 3.3-beta 解決了困擾我們已有的性能問題,對TS 開發者也更加友好,可是依舊未能完全解決交互上的問題。對於所有已知的交互和事件上的問題,我們也一直在探索各種解法。希望在G6 3.3 正式版發佈時,能給大家一個滿意的答案。

AntV G6 是一款開源的圖可視化引擎,專注於圖可視化及圖分析領域。
歡迎關注和star我們的GitHub: github.com/antvis/G6
官網: g6.antv.vision/zh/

blank

What do you think?

Written by marketer

blank

使用Vue 3.0做JSX(TSX)風格的組件開發

blank

字節跳動招聘| 和優秀的人,做有挑戰的事!