返回

Flutter 技术沙龙纪要:闲鱼优化 Flutter 实践分享

见解分享

1月16日,UC技术委员会联合掘金、谷歌开发者社区举办了2021年首届Flutter引擎为主题的技术沙龙活动。闲鱼作为Flutter最早的使用者之一,分享了他们在Flutter上的体验优化实践。

性能优化

1. 减少不必要的布局

Flutter中,每次状态改变都会触发布局和绘制,因此减少不必要的布局可以有效提升性能。闲鱼通过以下几种方式减少不必要的布局:

  • 使用InheritedWidget来避免子组件不必要的重建。
  • 使用setState()来更新组件的状态,而不是直接修改组件的属性。
  • 使用RepaintBoundary来隔离需要重绘的组件。

2. 减少不必要的绘制

Flutter中,每次布局改变都会触发绘制,因此减少不必要的绘制可以有效提升性能。闲鱼通过以下几种方式减少不必要的绘制:

  • 使用Offstage来隐藏不需要绘制的组件。
  • 使用ClipRect来裁剪不需要绘制的区域。
  • 使用Transform来平移、缩放或旋转组件,以避免不必要的重绘。

3. 使用更快的渲染模式

Flutter提供了两种渲染模式:debugreleaserelease模式比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提供了两种渲染模式:debugreleaserelease模式比debug模式更快,因此在生产环境中应使用release模式。

3. 使用更快的动画

Flutter提供了多种动画类型,其中一些动画比其他动画更快。闲鱼通过以下几种方式使用更快的动画:

  • 使用TweenAnimationBuilder来创建动画。
  • 使用CurvedAnimation来控制动画的加速和减速。
  • 使用Interval来限制动画的执行时间。

网络优化

1. 减少网络请求数量

Flutter中,网络请求数量越多,性能越差。闲鱼通过以下几种方式减少网络请求数量:

  • 合并网络请求。
  • 使用缓存来减少重复的网络请求。
  • 使用离线数据来减少网络请求数量。

2. 减少网络请求大小

Flutter中,网络请求大小越大,性能越差。闲鱼通过以下几种方式减少网络请求大小:

  • 压缩网络请求数据。
  • 使用CDN来减少网络请求距离。
  • 使用HTTP/2来减少网络请求延迟。

3. 使用更快的网络

Flutter中,网络速度越快,性能越好。闲鱼通过以下几种方式使用更快的网络:

  • 使用更快的网络连接。
  • 使用CDN来减少网络请求距离。
  • 使用HTTP/2来减少网络请求延迟。