Autolayout性能优化

客户的需求就是我们进步的动力。
近期有客户提出大数据量Topo图的自己主动布局问题。在Topo中除了Node、Link,还包含Group、Subnetwork等容器组件。

在这种情况下,我们抛开布局算法不谈。主要分析怎样提高布局的性能。怎样让TWaver可以支持更强大的数据量,让总体的布局效果更人性化。


首先我们应该去发现问题的根源,当TWaver支持大数据量时候,布局效果不佳,那么我们PC都在做什么呢。“它的时间都去哪了呢”?
不难发现。当我们创建N个节点的时候。TWaver会不断的刷新和绘制这些节点。当中最耗时间的莫过于DrawImage,由于每一个节点Default情况下都有个默认的Image(当然vector情况下例外)。可见,我们PC的时间都花在DrawIamge上面了,从而影响了总体的性能。
那么怎样解决问题呢?
事实上也非常easy。大数据量的布局,overView情况下。我们非常难看清晰每一个节点,那么既然看不清的节点我们为什么还花费大量的时间去认真的绘制它呢?想想是这样吧,仅仅要当zoom值小于某个threshold,我们就用vector的图形(Rect或者Cicle)取代节点,既提高了性能,并且也提高了视觉享受。

来看看这样布局的效果。


                                                                     图1 全部的Group都合并                                                                      图2 全部的Group均展开                                                                       图3 不断放大(zoom<threshold)

                                                                      图4 熟悉的面孔出现了(zoom>=threshold)
算法的改进还有非常多,比方我们也能够在zoom值非常小的时候放弃绘制attachment等等。
经过不断測试,这个方案的确使得布局效果有一定的改善。当然更大的改善还须要布局位置的计算算法和显示的算法相结合,这样才干达到更佳的效果。

原文地址:https://www.cnblogs.com/jzssuanfa/p/7029144.html