参考官方文档
保证flutter的流畅度及控制build()消耗
1、利用RepaintBoundary,提高build效率,降低Widget tree遍历的出发点,将setState刷新数据尽量下发到底层节点。
2、提高paint的效率,为经常发生显示变化的内容提供一个新的隔离layer,新的layer paint不会影响到其他layer。
3、减少build中逻辑处理,因为widget在页面刷新的过程中随时会通过build重建,build调用频繁,我们应该只处理跟UI相关的逻辑。
4、减少saveLayer(ShaderMask、ColorFilter、Text Overflow)、clipPath的使用,saveLayer会在GPU中分配一块新的绘图缓冲区,切换绘图目标,这个操作是在GPU中非常耗时的,clipPath会影响每个绘图指令,做相交操作,之外的部分剔除掉,所以这也是个耗时操作。
5、减少Opacity Widget 使用,尤其是在动画中,因为他会导致widget每一帧都会被重建,可以用 AnimatedOpacity 或 FadeInImage 进行代替。
6、针对Sliver滑动的优化,sliver在滑动过程中,添加缓存区。
7、带换行符的文本会影响布局效率,单行去掉换行符。
8、列表懒加载,ListView滚动到底部时才创建新的item。
9、避免在build方法中进行重复和高消耗的工作,因为build方法可能会被频繁的调用(当父组件、祖先组件rebuild时,当前组件的build也会被调用)。
10、尝试将大组件拆分为多个小组件。当一个组件的setState被调用时,它的所有子孙组件也会rebuild。因此如果只是某一个子组件发生了变化,那就尽量只调用该子组件的setState,而不要去调用其父组件或祖先组件的setState。
11、缓存没有变化的子树。
12、尽可能使用const组件(这样做与缓存一个组件并复用它是等价的)。
13、尽量不要改变组件树的结构或者组件树中组件的类型。它们会造成整个组件树的重新布局和渲染。
|