Autolayout性能优化
客户的需求就是我们进步的动力。
最近有客户提出大数据量Topo图的自动布局问题,在Topo中除了Node、Link,还包括Group、Subnetwork等容器组件。在这样的情况下,我们抛开布局算法不谈,主要分析如何提高布局的性能,如何让TWaver能够支持更强大的数据量,让整体的布局效果更人性化。
首先我们应该去发现问题的根源,当TWaver支持大数据量时候,布局效果不佳,那么我们PC都在做什么呢,“它的时间都去哪了呢”?
不难发现,当我们创建N个节点的时候,TWaver会不断的刷新和绘制这些节点,其中最耗时间的莫过于DrawImage,因为每个节点Default情况下都有个默认的Image(当然vector情况下例外)。可见,我们PC的时间都花在DrawIamge上面了,从而影响了整体的性能。
那么如何解决这个问题呢?
其实也很简单,大数据量的布局,overView情况下,我们很难看清晰每个节点,那么既然看不清的节点我们为什么还花费大量的时间去认真的绘制它呢?想想是这样吧,只要当zoom值小于某个threshold,我们就用vector的图形(Rect或者Cicle)代替节点,既提高了性能,而且也提高了视觉享受。来看看这样布局的效果。
图1 所有的Group都合并 图2 所有的Group均展开
图4 熟悉的面孔出现了(zoom>=threshold)
算法的改进还有很多,比如我们也可以在zoom值很小的时候放弃绘制attachment等等。
经过不断测试,这样的方法的确使得布局效果有一定的改善,当然更大的改善还需要布局位置的计算算法和显示的算法相结合,这样才能达到更佳的效果。