iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

30天學習flutter系列 第 26

26.關於flutter的優化 (二)

  • 分享至 

  • xImage
  •  
  • 用key來縮短widget構建時間

使用ValueKeyObjectKeyUniqueKey等key,來避免flutter上的Element被unmount,盡量讓Element Tree多做active和update操作,進而避免element再一個frame沒被active,而被卸載。

當UI有明顯卡頓時,我們優先使用key來嘗試解決,如果還是有卡的話,我們可以使用Isolate來優化

  • 耗時的計算影響到效能時,使用Isolate,而非async

大部分的task,只要遇到耗時的task,基本上都使用async做非同步處理即可。而當你的UI開始變卡,耗時的task開始影響到效能時,這時我們則應使用isolate,將它交給獨立的isolate 處理完後,再送回主要的UI thread。

但由於isolate的流程十分複雜,所以Dart 提供了一個比較容易使用的 compute() function,幫開發者包裝自建 isolate 的繁雜流程。我們能使用compute來交給isolate處理
ex.Link

Future<List<Photo>> fetchPhotos(http.Client client) async {
  final response = await client
      .get(Uri.parse('https://jsonplaceholder.typicode.com/photos'));

  // Use the compute function to run parsePhotos in a separate isolate.
  return compute(parsePhotos, response.body);
}

而compute方式雖然已經十分方便,但由於會去建立新isolate並在處理完後刪掉,由於isolate建立時是高成本的,如果頻繁刪建isolate仍會造成效能降低,所以提供了類似pool的方法loadBalancer,有興趣更加瞭解可以看這篇作者Daniel Kao的文章Advanced isolate usage in flutter


ref:

Flutter Performance
Advanced isolate usage in flutter
Multithreading in Flutter using Dart isolates
Concurrency in Dart

Flutter compute example
LoadBalancer
深入探索Flutter性能优化


探討完了關於一些常見的flutter優化後,接下來我們要繼續完成我們的Todo App,明天見


上一篇
25.關於flutter的優化 (一)
下一篇
27.關於flutter的dev tool(一)
系列文
30天學習flutter30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言