0%

【文章翻譯】Flutter Performance Updates in the first half of 2020

【文章內容使用 Gemini 1.5 Pro 自動產生】

Flutter 在 2020 年上半年的效能更新

作者:Yuqian LiShams Zakhour

速度是 Flutter 的關鍵支柱。本文重點介紹 Flutter 社群成員在 2020 年上半年實施的效能改進。

如果您在 2020 年 6 月之後幫助過效能改進,我們將在未來的文章中涵蓋這些內容。我們希望與您分享這些內容,希望 Flutter 社群受到鼓舞,一起參與改進 Flutter 效能的努力!

量化改善

貢獻者: alexmarkovsstricklmkustermannaskeksa-googlermacnak-googlemralephcrelier

[應用程式大小] 透過字體子集處理,Gallery 應用程式縮減了 100KB 的大小

貢獻者: dnfieldjonahwilliamszandersojmagmanblasten

  • PR 1482849737498425022451808
  • Flutter Gallery 應用程式縮减了 100KB 的大小 (大小縮減)
  • 修復了「搖樹 Material 圖示 16311」,「將 hb-subset 作為引擎組建的一部分進行組建並上傳到雲端儲存 43642」,「在 flutter_tools 中使用 font-subset 並搖樹圖示字體 43644」,「為所有平台連接字體子集處理 49730“)。

[速度、記憶體] dart2js 工具的運行速度提升了 9 倍,記憶體減少了 99% 以上

貢獻者: rmacnak-googlea-siva

[速度] 從 OpenGL 切換到 Metal,iOS 平均渲染速度提升了 50%

貢獻者: chinmaygardednfieldjason-simmonscbrackenamirhliyuqian

[速度] 由於著色器編譯,最差畫面渲染時間提升了 2 到 5 倍

貢獻者: liyuqianjonahwilliamschinmaygardeiskakaushikzandersosfshaza2filiphacoutts

  • PR 173005385917601178615874356638443012142
  • Android 的 flutter_gallery__transition_perf 最差畫面渲染時間 worst_frame_rasterizer_time_millis 提升了 2.25 倍 (從 90ms 到 40ms)
  • iOS 的 flutter_gallery_ios32__transition_perf 最差畫面渲染時間 worst_frame_rasterizer_time_millis 提升了 5 倍 (從 300ms 到 60ms)
  • 一些實際應用程式的速度提升了 3.75 倍 (從 229ms 到 61ms)
  • 修復了「基於 SkSL 的著色器預熱 53607」、「三次貝茲曲線回歸 35142」和「儲存」一些客戶。

[速度] 滑鼠點擊測試速度提升了 15.8 倍

貢獻者: dkwingsmtyjbanovgoderbauergspencergoog

  • PR 59803 59883
  • bench_mouse_region_grid_scroll 的畫面持續時間 (網頁) 提升了 15.8 倍 (從 79ms 到 5ms)。
  • 修復了「訂閱 MouseRegion 事件時效能低下 41194

[速度] 平台訊息回應處理速度提升了 13.9 倍

貢獻者: zljj0818jason-simmonsliyuqian

  • PR 1883818945,兩者都受 18808 啟發
  • 修復了「載入大型圖片時,Image.asset 會阻塞 UI 線程 58572
  • PlatformMessageResponseDartComplete 速度提升了 13.9 倍 (從 9164us 到 660us)

[速度] 使用不透明路由時,畫面構建時間提升了 20% 到 37%

貢獻者: goderbauerdnfield

  • PR 48900
  • flutter_gallery_ios32__transition_perf 的平均畫面構建時間 average_frame_build_time_millis 提升了 20% (從 7.38ms 到 6.13ms)
  • flutter_gallery_ios32__transition_perf 的第 99 個百分位數畫面構建時間 99th_percentile_frame_build_time_millis 提升了 37% (從 50.45ms 到 36.63ms)
  • 修復了「在推入覆蓋/導航器不透明內容時,優化不必要的重建 45797

[速度] 使用 ImageFiltered 而不是 BackdropFilter,模糊效果速度提升了 4.8 倍

貢獻者: flarhixieyjbanovliyuqian

[速度] 使用 Flutter 網頁捲軸大型靜態內容時,速度提升了 14 倍

貢獻者: yjbanovferhatb

  • PR 17621
  • text_canvas_cached_layout.html.layout.average 速度提升了 14.01 倍 (從 463.74ms 到 33.10ms)
  • 修復了「使用 Flutter Web 捲軸大型靜態內容時卡頓 42987」和「在 Web 上繪製畫布邊界外的文字很昂貴 48516

[速度] Flutter 引擎 Shell 初始化速度提升了 6.8 倍

貢獻者: scutlightjason-simmonsgaaclarkeliyuqian

[速度] 限制條件相同時,跳過調用構建器,速度提升了 5 倍

貢獻者: yjbanovhixie

  • PR 55414
  • 使用 Flokk 客戶端應用程式捲軸聯絡人列表時,速度提升了 5 倍(從大約 10FPS 到大約 50FPS)。
  • 修復了「LayoutBuilder 應該快取限制條件,如果沒有改變就不應該重新建立 6469

[速度] 網頁上的陰影和動畫速度提升了 2 倍

貢獻者: ferhatbmdebbaryjbanov

貢獻者: ferhatbclocksmithrami-a

[速度] 在 Fuchsia 中啟用柵格快取後,平均畫面渲染時間提升了 2.8 倍

貢獻者: drevemanliyuqianchinmaygardearbreng

  • PR 17753
  • frame_rasterizer_times_avg 速度提升了 2.8 倍(從大約 10ms 到大約 3.5ms)
  • 修復了「由於柵格快取被停用,Fuchsia 上的效能低下 54950

[速度] 透過排除無效的動畫圖片,第 90 個百分位數畫面構建時間提升了 1.85 倍

貢獻者: dnfieldliyuqiantvolkertdigiter

  • PR 5085150842
  • animated_placeholder_perf 的第 90 個百分位數畫面構建時間提升了 1.85 倍 (從 3.148ms 到 1.699ms)
  • 修復了「當長列表中的卡片內部使用列表構建器時,flutter 的畫面速率很低 (平均 20 到 35fps) 35592

[速度] Google 智能顯示器 P10 的 FPS 提升了 2 倍

貢獻者: chinmaygardednicoaracbrackenjason-simmonsasakhartrdaum

  • PR 15980
  • 透過讓嵌入器可以調整線程優先順序,速度提升了 2 倍(從 30fps 到 60fps)。
  • 修復了問題 49551

[速度] 透過增強子元素快取,ImageFilterLayer 的速度提升了 2.45 倍

貢獻者: flarliyuqian

  • PR 171755490358277
  • ImageFiltered Transform 的平均畫面渲染時間 average_frame_rasterizer_time_millis 提升了 2.45 倍 (從 18.41ms 到 7.53ms)
  • 還修復了「由於 OpacityLayer 柵格快取未命中,轉場效能略有下降 52864

[速度] 大型 dart2js 編譯速度提升了 15%

貢獻者: rmacnak-googlea-siva

[速度] 大型應用程式的 AOT 編譯時間提升了 1.8 倍

貢獻者: alexmarkovmralephsigurdmcskau-g

[速度] Dart RegExp 在 AOT 模式下的匹配速度提升了 5 到 13 倍

貢獻者: mralephrmacnak-google

[速度] Dart UTF8 解碼速度提升了 5 倍

貢獻者: askeksa-googlemkustermannrakudrama

  • 提交 cf6f89e35ca378df4afa2fd4
  • X64JIT TwoByteString 基準測試速度提升了 5.02 倍。
  • 修復了「快速路徑 Uint8List 到 _OneByteString 轉換 41703」、「直接將 UTF-8 結果寫入字串 41704

[速度] async/sync* 函數的速度提升了 35% 到 65%

貢獻者: cskau-gmkustermannmraleph

  • 提交 e29407fdca1f7ed169ca94ad
  • 在 {dart,dart-aot}-{ia32,x64,armv7hf,armv8} 上,Calls.IterableManualIterablePolymorphicManyYields 的速度提升了 35% 到 65%。
  • 修復了「改進 VM 上 sync* 程式碼的效能 37753」、「在 VM 中生成 sync-yield 函數時,評估使用 IndirectGoto 37754

[速度] 使用未裝箱的參數和欄位,時間最多減少了 31.82%

貢獻者: mkustermannmkustermann

  • 提交 9eb531b95149e076e79eb531
  • matrix_utils_transform_rect_affine 迭代時間最多減少了 31.82%。
  • 修復了「Dart VM 中的真實未裝箱欄位 40004

[速度] Dart Pointer<Int8,Int64,etc> 在 AOT 中的載入/儲存速度提升了 20% 到 25%

貢獻者: dcharkesmkustermann

  • 提交 408123
  • 在 x64 上,AOT 中的 Pointer&lt;Int8,Int64,etc&gt; 載入/儲存速度提升了 20% 到 25%。
  • 幫助「儲存和載入應該支援未裝箱的索引 (在 AOT 中) 39432

其他改進

[應用程式大小、能源、記憶體、速度] 將 A/B 測試模式加入到本機 Devicelab 執行器

貢獻者: yjbanovflarferhatbchristopherfujinoliyuqian

[應用程式大小] 修復了「常見問題解答中 iOS 應用程式大小不正確」

貢獻者: [jmagman](https://github.com/