Flutter 技术沙龙纪要:闲鱼优化 Flutter 实践分享
2024-02-04 23:33:41
1月16日,UC技术委员会联合掘金、谷歌开发者社区举办了2021年首届Flutter引擎为主题的技术沙龙活动。闲鱼作为Flutter最早的使用者之一,分享了他们在Flutter上的体验优化实践。
性能优化
1. 减少不必要的布局
Flutter中,每次状态改变都会触发布局和绘制,因此减少不必要的布局可以有效提升性能。闲鱼通过以下几种方式减少不必要的布局:
- 使用
InheritedWidget
来避免子组件不必要的重建。 - 使用
setState()
来更新组件的状态,而不是直接修改组件的属性。 - 使用
RepaintBoundary
来隔离需要重绘的组件。
2. 减少不必要的绘制
Flutter中,每次布局改变都会触发绘制,因此减少不必要的绘制可以有效提升性能。闲鱼通过以下几种方式减少不必要的绘制:
- 使用
Offstage
来隐藏不需要绘制的组件。 - 使用
ClipRect
来裁剪不需要绘制的区域。 - 使用
Transform
来平移、缩放或旋转组件,以避免不必要的重绘。
3. 使用更快的渲染模式
Flutter提供了两种渲染模式:debug
和release
。release
模式比debug
模式更快,因此在生产环境中应使用release
模式。
卡顿优化
1. 避免长时间的计算
Flutter中,长时间的计算会阻塞UI线程,导致卡顿。闲鱼通过以下几种方式避免长时间的计算:
- 将长时间的计算移到后台线程。
- 使用
Future
来异步执行长时间的计算。 - 使用
Isolate
来并行执行长时间的计算。
2. 避免过多的状态更新
Flutter中,每次状态更新都会触发布局和绘制,因此过多的状态更新会导致卡顿。闲鱼通过以下几种方式避免过多的状态更新:
- 避免在不必要的时候更新组件的状态。
- 使用
setState()
来批量更新组件的状态。 - 使用
RepaintBoundary
来隔离需要重绘的组件。
3. 使用更快的动画
Flutter提供了多种动画类型,其中一些动画比其他动画更快。闲鱼通过以下几种方式使用更快的动画:
- 使用
TweenAnimationBuilder
来创建动画。 - 使用
CurvedAnimation
来控制动画的加速和减速。 - 使用
Interval
来限制动画的执行时间。
页面优化
1. 减少页面加载时间
Flutter页面加载时间主要取决于以下几个因素:
- 页面大小
- 网络速度
- 设备性能
闲鱼通过以下几种方式减少页面加载时间:
- 减少页面大小。
- 优化网络请求。
- 使用更快的设备。
2. 提高页面渲染速度
Flutter页面渲染速度主要取决于以下几个因素:
- 页面复杂度
- 设备性能
闲鱼通过以下几种方式提高页面渲染速度:
- 减少页面复杂度。
- 使用更快的设备。
3. 改善页面交互体验
Flutter页面交互体验主要取决于以下几个因素:
- 页面布局
- 组件响应速度
- 动画效果
闲鱼通过以下几种方式改善页面交互体验:
- 合理布局页面。
- 优化组件响应速度。
- 使用流畅的动画效果。
内存优化
1. 减少内存泄漏
Flutter中,内存泄漏是指对象在不再使用后仍然被持有,导致内存无法被释放。闲鱼通过以下几种方式减少内存泄漏:
- 使用
WeakReference
来持有对象。 - 使用
ScopedModel
来管理对象的生命周期。 - 使用
AutomaticKeepAliveClientMixin
来防止组件被销毁。
2. 减少内存占用
Flutter中,内存占用主要取决于以下几个因素:
- 页面大小
- 组件数量
- 对象大小
闲鱼通过以下几种方式减少内存占用:
- 减少页面大小。
- 减少组件数量。
- 减少对象大小。
3. 使用更少的内存
Flutter提供了多种方式来减少内存占用,其中一些方式比其他方式更有效。闲鱼通过以下几种方式使用更少的内存:
- 使用
ImageCache
来缓存图像。 - 使用
AssetBundle
来加载资源。 - 使用
Isolate
来并行执行任务。
渲染优化
1. 减少不必要的重绘
Flutter中,每次布局改变都会触发重绘,因此减少不必要的重绘可以有效提升性能。闲鱼通过以下几种方式减少不必要的重绘:
- 使用
RepaintBoundary
来隔离需要重绘的组件。 - 使用
Offstage
来隐藏不需要重绘的组件。 - 使用
ClipRect
来裁剪不需要重绘的区域。
2. 使用更快的渲染模式
Flutter提供了两种渲染模式:debug
和release
。release
模式比debug
模式更快,因此在生产环境中应使用release
模式。
3. 使用更快的动画
Flutter提供了多种动画类型,其中一些动画比其他动画更快。闲鱼通过以下几种方式使用更快的动画:
- 使用
TweenAnimationBuilder
来创建动画。 - 使用
CurvedAnimation
来控制动画的加速和减速。 - 使用
Interval
来限制动画的执行时间。
网络优化
1. 减少网络请求数量
Flutter中,网络请求数量越多,性能越差。闲鱼通过以下几种方式减少网络请求数量:
- 合并网络请求。
- 使用缓存来减少重复的网络请求。
- 使用离线数据来减少网络请求数量。
2. 减少网络请求大小
Flutter中,网络请求大小越大,性能越差。闲鱼通过以下几种方式减少网络请求大小:
- 压缩网络请求数据。
- 使用CDN来减少网络请求距离。
- 使用HTTP/2来减少网络请求延迟。
3. 使用更快的网络
Flutter中,网络速度越快,性能越好。闲鱼通过以下几种方式使用更快的网络:
- 使用更快的网络连接。
- 使用CDN来减少网络请求距离。
- 使用HTTP/2来减少网络请求延迟。