Flutter關于性能數據的幾個知識點

      網友投稿 1000 2022-05-30

      在衡量性能時,應用程序中的渲染動畫一直是最受關注的話題之一。由于 flutter 自帶的 Skia 引擎以及它能夠快速創建和處理組件的能力, Flutter 應用在默認情況下就能保證擁有良好的性能,因此我們只需避開常見的陷阱就可以獲得出色的性能。

      有幾種常見的陷阱:

      每幀重建的 UI 比預期的要多得多。要跟蹤組件的重建,

      直接構建大量的子組件列表,而不使用 ListView。

      顯示性能數據

      在 Debug 模式下啟動應用后,使用 View > Tool Windows > Flutter Performance 打開性能工具窗口,以查看性能數據以及 widget 的 rebuild 信息。

      點擊 Performance 窗口中的 Show widget rebuild information,查看正在重載的 widget 統計信息和重載頻率。右邊第二列顯示了所在框架的重載次數。如果重載次數過多,會顯示一個黃色旋轉圓圈。最右一列顯示了進入當前頁面后 widget 的重載次數。對于未重載的小部件,將顯示一個灰色圓圈,否則將顯示一個灰色旋轉圓圈。

      Flutter關于性能數據的幾個知識點

      截圖中的應用性能較差,通過重載分析器,你可以找到導致性能差的線索。重載分析器不是一個性能診斷工具,但它和性能有關。

      該功能的目的是讓你了解 widget 是何時重載的,只看代碼的話可能不好發現。如果 widget 在你預想不到的情況下發生了重載,說明你可能需要重構代碼,將大型的構建方法拆分成多個 widget。

      該工具可以幫助你調試至少四個常見的性能問題:

      整個屏幕(或大部分屏幕)由一個 StatefulWidget 構成,導致不必要的 UI 構建。可將 UI 拆分成多個具有較輕量 build() 方法的 widget。

      未在屏幕上顯示的 widget 發生了重載。例如,一個延伸到屏幕外的 ListView,或者未給延伸到屏幕外的列表設置 RepaintBoundary,會導致重繪整個列表。

      AnimatedBuilder 的 build() 方法繪制了一個不需要動畫的子樹,導致不必要的靜態對象重載。

      一個 Opacity widget 在 widget tree 中使用了一個不必要的高度,或者通過直接操作 Opacity widget 的透明屬性創建 Opacity 動畫,導致 widget 和它的子樹重載。

      你可以點擊表格中的一行,定位到創建指定 widget 的源碼位置。隨著代碼的運行,旋轉圖標也會在代碼窗口中顯示,以幫助你觀察正在進行的重載。

      大量的重載并不一定表示存在問題。通常情況下,只有當你通過分析發現性能不理想時,才需要考慮過度重載的問題。

      記住,widget 的重載信息只在 debug 版本中可用,在真機上使用分析構建 (profile build) 進行應用性能分析,使用調試構建 (debug build) 進行性能問題調試。

      提示和技巧

      Flutter的幾個性能指標

      第一幀的啟動時間

      當 WidgetsBinding.instance.firstFrameRasterized 為 true 時查看耗時。

      查看 性能數據看板。

      一幀的構建時間,柵格化時間,以及總時間

      在 API 文檔中查看 FrameTiming 。

      一幀的構建時間 buildDuration (*_frame_build_time_millis)

      我們建議監測四個數據:平均值、90 分位值、99 分位值和最差幀構建時間。

      例如,查看 flutter_gallery__transition_perf 測試案例中的 構建數據 。

      一幀的柵格化時間 rasterDuration (*_frame_build_time_millis)

      我們建議監測四個數據:平均值、90 分位值、99 分位值和最差幀構建時間。

      例如,查看 flutter_gallery__transition_perf 測試案例中的 柵格化數據 。

      CPU/GPU 的使用情況(一個可以近似衡量功耗的指標)

      該數據目前僅能通過跟蹤事件獲取。查看 profiling_summarizer.dart 。

      查看 simple_animation_perf_ios 測試案例中的 CPU/GPU 數據。

      release_size_bytes 對 Flutter 應用程序的大小進行估算

      查看數據看板中的 體積大小 數據。

      有關如何更精確的測量應用體積信息,查看 應用體積 頁面。

      減少應用大小

      刪除無用的資源

      盡量減少從庫中引入的資源

      壓縮 PNG 和 JPEG 文件

      so 優化大法

      混淆

      Flutter

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Visual C++文件后綴名釋義
      下一篇:機器人操作系統ROS淺析
      相關文章
      亚洲国产av无码精品| 国产成人精品日本亚洲专一区| 婷婷精品国产亚洲AV麻豆不片 | 1区1区3区4区产品亚洲| 亚洲 自拍 另类小说综合图区| 亚洲国产精品久久久久秋霞小| 久久久亚洲裙底偷窥综合| 婷婷亚洲综合五月天小说| 亚洲AV无码专区在线播放中文| 伊在人亚洲香蕉精品区麻豆| 亚洲三级视频在线| 亚洲2022国产成人精品无码区 | 亚洲性色精品一区二区在线| 亚洲网站免费观看| 亚洲欧洲美洲无码精品VA| 久久无码av亚洲精品色午夜| 自拍日韩亚洲一区在线| 亚洲精品伊人久久久久| 亚洲AV无码无限在线观看不卡| 亚洲美女精品视频| 亚洲美女视频免费| 亚洲av永久无码精品三区在线4 | 亚洲一区二区三区在线| 国产亚洲精品bv在线观看| 亚洲日产乱码一二三区别 | 亚洲黄色高清视频| 亚洲一级免费毛片| 亚洲日本va一区二区三区| 亚洲国产成人AV在线播放| 狠狠入ady亚洲精品| 亚洲一级片免费看| 色欲aⅴ亚洲情无码AV| 亚洲国产综合精品中文字幕 | 亚洲AV乱码久久精品蜜桃| 亚洲人成网址在线观看| 国产成A人亚洲精V品无码| 亚洲色偷偷综合亚洲AVYP| 亚洲人成网站18禁止一区| 亚洲中文字幕日产乱码高清app| 亚洲精品国产精品乱码在线观看| 亚洲av女电影网|