一图胜千言— Tcharts 图可视化解决方案
可视化终极目标是对事物规律的洞悉。通过可视化表达来增强人们完成某件任务的效率。图可视化通常被应用到社交网络,调用链,网络安全,知识图谱等场景中。
渲染性能和交互性能不满足要求。
节点和链路可表达的“视觉通道”有限,不能满足复杂业务含义。
大数据量导致的视觉混乱,导致无法表现事物规律。
定制化能力不足。
1. Tcharts 的核心架构
场景化组件层:
组件/接口层:
原子组件层:
功能组件层:
渲染层:
基础能力层:
2. 拓扑图的性能测评
Tcharts 与开源图表库的性能对比如下:
3. 高性能渲染
局部刷新
首先确定节点(或链路)的矩形包围盒
清除这个包围盒内的颜色,设置这个区域为 clip 区域
重新绘制全部跟这个区域相交的图形
画布中有 A,B,C,D,E,F 多个元素。C移动位置,重绘的只有 B,C,D 三个元素。只需把虚线框内的区域清除,在虚线框的区域创建裁剪区域(使用clip()方法),再绘制 B,C,D。
下列视频通过给画布增加一个网格线,来演示 Tcharts 拖拽节点位置,局部刷新的过程。
在 Tcharts 中,所有需要局部刷新的元素,都实现接口 LocalElement。
把所有需要局部刷新的元素添加到对应 Layer 中。
[点击查看大图]
仅绘制可视范围
高性能渲染节点图标
M = moveto
L = lineto
H = horizontal lineto
V = vertical lineto
C = curveto
S = smooth curveto
Q = quadratic Belzier curve
T = smooth quadratic Belzier curveto
A = elliptical Arc
Z = closepath
大写表示命令的参数是绝对的,小写表示参数是相对的。使用相对位置的原因是为了节省空间,比如(10000,10000)这个顶点用很多个0去表示,如果这个点相对上个点才偏移(10, -1),这就省下了好几个字符。
例如:M100 100表示移动到 x=100, y=100的位置。m100 100 表示移动到相对于前一个点x + 100, y + 100的地方。
如果想了解 SVG path 转化 Canvas 更多细节,可以查看文末联系云监控小助手。
4. 高性能交互
分层渲染
链路和节点的动画,在单独的层渲染,频繁的刷新不影响核心绘制层。
下列视频为节点动画的例子:
Hover 事件优化
拓扑图的鼠标 Hover 事件与折现图的事件不同,不需要实时显示 tooltip。hover 事件增加 100ms 的延迟。
相交判断优化
鼠标 Hover 和选中事件,判断是否与某个对象相交。判断的过程中,只需要遍历用户当前可见的对象。
5. 视觉通道有限
节点和链路可表达的视觉通道有限,不能满足复杂业务含义。
Tcharts 对显示样式和交互做了整体规划。节点大小,颜色,描边,底色,角标多种组合灵活满足业务需求。
[点击查看大图]
6. 大数据的视觉混乱,导致无法表现事物规律。
“聚合节点”让数据量变少。支持展开分组方式,或直接展示。
展示聚合节点的时候,右上角“角标“展示该节点包含的子节点数。点击角标展开聚合节点。
[点击查看大图]
[点击查看大图]
链路支持折叠或展开,减少链路的复杂性。
[点击查看大图]
[点击查看大图]
优化后的效果对比
[点击查看大图]
7. Tcharts 的定制化能力
shape 支持圆型,矩形,圆角矩形,椭圆形等。
1. GPU 和 CPU 的性能对比
[点击查看大图]
Babylon.js team 和 Three.js team官方都支持了 WebGPU 渲染。
2. Web Worker交互优化
Web Worker 实现离屏渲染:
[点击查看大图]