Flutter常用性能优化方式

2023-06-14  本文已影响0人  为什么划船不靠桨

1. 开启flutter代码规范,使用flutter团队代码规范使用我们代码更性能更高效。

2. 使用const修饰widget,这样可以使用系统知道我们的widget可以缓存下来,提高rebuild的效率。

3. 我们再开发中经常会把复杂的wiedget提取出一个方法使用代码看起来比较简洁,其实Flutter团队建议封装成个StatelessWidget性能会更好,你封装成方法底层框架不是你这方法是否需要复用所以他是不会缓存起来,如果你封装成一个StatelessWidget系统就知道你这个Widget是可以缓存复用的,间接提高效率。

4. 使用状态管理框架对widget实现局部刷新,常用的状态管理框架有providermobxget,前面两个都是Flutter社区推荐的。

5. 避免更改组件树的结构和组件的类型,树结构改变会导致树重新rebuild。如果需要返回两种不同类型的widget,可以把变化的widget封装到StatefulWidget里面,如果你使用状态管理框架可以封装到StatelessWidget里面。添加constkey实现缓存复用。

6. ListView是我们最常用的组件之一,用于展示大量数据的列表。如果展示大量数据请使用ListView.builder 或者 ListView.separated, 实现复用,如果item布局高度可以固定可以使用itemExtent 属性提高性能(提高系统测量效率)。

7. AnimatedBuilderTweenAnimationBuilder 等一类的组件的问题,这些组件都有一个共同点,带有 builder 且其参数重有 child。以 AnimatedBuilder 为例,如果 builder中构建的树中包含与动画无关的组件,将这些无关的组件当作 child 传递到 builder 中比直接在 builder 中构建更加有效。

8. 避免调用 saveLayer(调用 saveLayer()会开辟一片离屏缓冲区。将内容绘制到离屏缓冲区可能会触发渲染目标切换,这些切换在较早期的 GPU 中特别慢)。

9. 如果你要执行一些比较耗时操作建议使用isolate,如果任务比较耗时使用异步也会导致ui卡顿。

10. 优先使用StateLessWidget,而不是全部用StateFulWidget

11. 对于频繁更新的控件(比如倒计时,秒表),使用RepaintBoundary隔离它,让他在一个独立的paint区域。

12. 简单的ui样式,可以自己封装实现。

13. 建议及时更新Flutter版本,每个新的版本都会有很多性能上的优化。

14. Opacity减少使用特别是动画中,淡入效果可以使用AnimatedOpacityFadeInImage,透明效果可以设置widget的背景颜色实现。

上一篇下一篇

猜你喜欢

热点阅读