減緩 PageView 動畫加上 Table 造成的卡頓 — 問題篇

閱讀時間約 4 分鐘


raw-image

最近我們新增了一個顯示球員詳細資訊的頁面,當我們完成第一版程式碼,開始調整細節時,我們發現了畫面滑動似乎不太順暢。

raw-image

每個球員訊息彈跳視窗是靜態,外層使用了 PageView 加上一些的特效,使得畫面在滑動時會頻繁的 setState,造成了整個彈跳視窗卡頓,使用者體驗不佳,就像遊戲效能不好一樣會掉幀,嚴重一點可能會讓人不舒服。今天就來分享如何快速有效的解決這個問題吧。

開啟 Profile 模式

首先,想要有效的解決問題,釐清問題是第一步。為了要了解我們畫面卡頓的問題根源,我們使用 Flutter 提供的 DevTools 並在實體手機上運行 Profile 模式。Profile 模式是讓 App 運行效能接近 Release 模式同時又能搜集運行資訊的一種模式。當我們執行程式並開起 DevTools 之後,可以觀察到 App 運行時,每一個 Frame 效能到底如何。

Dev tools

在 Dev Tools 面板中,可以發現在大多數 Frame 中,UI phase 與 Raster phase 都花了很多時間,這通常表示問題可能有很多個,但是我們今天先研究 UI phase 花過久時間的問題吧。

raw-image

在面板中清楚看到了 Build 和 Layout 畫面的操作各花了多久時間,我們可以初步了解問題可能發生在哪邊,但是只有這些資訊,顯然不夠我們解決問題。

啟用 Track Widget Builds

為了更深入了解問題出在哪邊,我們可以在 Dev Tools 的右上角打開 Enhance Tracing,並且勾選 Track Widget Builds,這個功能可以提供更詳細的時間,提供每一個 Widget 在每一個 Frame 中所花費的時間。

raw-image

觀察 Widget Build 火焰圖

當我們啟用 Track Widget Build 之後,我們再繼續操作一下手機,讓手機繼續執行幾個 Frame,我們就能這些新產生的報告找到 Timeline Events,在 Timeline Events 中, DevTools 顯示在這個 Frame 中 Build Widget 所花費的時間,能更直觀地看到時間到底花在哪個 Widget 上了。

分析問題

從火焰圖中我們可以得知,PlayerInfoGameLogView 花費的時間佔了很大一部份比例,而且每一個 Frame 都是這種狀況。這表示畫面滑動的時候,每一個 Frame 都在重新建立這個 Widget。

雖然我們滑動需要頻繁的 setState,畫面其實是不變的,數值並不會在滑動過程中有變化,應該要可以使用重複使用之前已經 Build 好的 Widget,但是顯然 Flutter 不這麼認為,而是辛苦的每一個 Frame 都Rebuild 新的 Widget。

小結

在分析問題中,我們發現問題的癥結點,當我們滑動 PageView 時,Flutter 會重複且完整的建立每一個 Page,花費許多時間去 Build Widget,在下一篇文章中,我們會利用 dartpad 寫一個有問題的範例,並在這個範例中探討解決方案,有興趣的朋友可以先嘗試看看。

分享各種 Flutter 開發技巧
留言0
查看全部
發表第一個留言支持創作者!
本文探討如何在 Flutter 中自訂 Tab Bar 特效,提升使用者介面互動性。從基本的 Row 佈局開始,我們逐步實現選中 Tab 動態變化的需求。最後,使用 CustomMultiChildLayout 與 AnimatedSize 實現一個符合設計需求的 Tab Bar,提升整體使用體驗。
本文探討如何有效解決 Flutter 中 PageView 動畫與複雜畫面造成的卡頓問題。透過使用 Provider 優化效能,減少不必要的 Widget 重建,達成更流暢的使用體驗。本文提供範例程式碼及效能分析,讓開發者能夠理解並應用於實際產品中,從而改善應用的效能。
本文探討如何在 Flutter 中自訂 Tab Bar 特效,提升使用者介面互動性。從基本的 Row 佈局開始,我們逐步實現選中 Tab 動態變化的需求。最後,使用 CustomMultiChildLayout 與 AnimatedSize 實現一個符合設計需求的 Tab Bar,提升整體使用體驗。
本文探討如何有效解決 Flutter 中 PageView 動畫與複雜畫面造成的卡頓問題。透過使用 Provider 優化效能,減少不必要的 Widget 重建,達成更流暢的使用體驗。本文提供範例程式碼及效能分析,讓開發者能夠理解並應用於實際產品中,從而改善應用的效能。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
這次的side bar不一樣了,上一次我好像做的太簡單了,所以完讀率只有14%,我好難過啊(;´д`)ゞ,所以我這準備的內容有多一點。 這次的目標 按鈕的排版 按鈕滑過去會有顏色變化 Side bar能夠展開 箭頭能夠移動至被選擇的物件上 宣告 這次我創了兩個檔案 SideBa
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
極簡網頁設計依然是主流,以其乾淨、有序的視覺效果和強調內容的功能性,幫助用戶集中注意力於重要信息。
Thumbnail
Windows Clarity 是一種網站分析產品,讓網站設計師、開發人員可藉由它,更容易觀察用戶在網站的操作行為,協助更快速的優化網站,加強網頁的轉換效果與商業目標的達成。本文將介紹 Windows Clarity 應該如何使用,強化分析能力與優化網站效益。
Thumbnail
在當今的IG時代,多媒體內容已成為網頁設計不可或缺的一部分,它不僅豐富了用戶的互動體驗,還能顯著提升網站的吸引力和溝通效率。本文將探討多媒體內容對用戶體驗(UX)的影響、SEO最佳實踐與多媒體的整合方法,並提供成功整合多媒體的網站案例。
Thumbnail
透過GraphQL提供的分頁方式,優化後端讀取資料的效能,避免過度讀取舊資料及準確指定特定項目。同時,利用Local-only field達成資料的整理或再次經過計算,提升管理和重複使用的效能。
圖片大小 漂亮的圖片讓人賞心悅目,對網站美化也是一大加分項,但若是為了呈現自家商品或吸引人的圖片搭配文字,而塞進過量的圖片,導致網站本身太重跑得太慢,容易使客人失去耐性。|SEO工具 隨著時代的進步網路速度也與時俱進,但若網站本身太重,就算網路狀況再良好也無法馬上將網站載好,根據統計,大多數人的
Thumbnail
在當代數據驅動的設計領域裡,了解用戶如何與你的網站互動是至關重要的。Microsoft Clarity是一款功能強大的用戶分析工具,它提供的直觀見解可以幫助開發者和設計師深入掌握用戶行為,從而優化用戶體驗和提升網站性能。
Thumbnail
UI(使用者介面)設計對於用戶體驗至關重要。一個好的UI設計可以讓用戶輕鬆地與應用互動,而糟糕的設計則可能導致用戶感到困惑甚至沮喪。本文將探討五個UI 設計在App開發中常見的錯誤,並提供相應的解決策略。
Thumbnail
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
這次的side bar不一樣了,上一次我好像做的太簡單了,所以完讀率只有14%,我好難過啊(;´д`)ゞ,所以我這準備的內容有多一點。 這次的目標 按鈕的排版 按鈕滑過去會有顏色變化 Side bar能夠展開 箭頭能夠移動至被選擇的物件上 宣告 這次我創了兩個檔案 SideBa
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
極簡網頁設計依然是主流,以其乾淨、有序的視覺效果和強調內容的功能性,幫助用戶集中注意力於重要信息。
Thumbnail
Windows Clarity 是一種網站分析產品,讓網站設計師、開發人員可藉由它,更容易觀察用戶在網站的操作行為,協助更快速的優化網站,加強網頁的轉換效果與商業目標的達成。本文將介紹 Windows Clarity 應該如何使用,強化分析能力與優化網站效益。
Thumbnail
在當今的IG時代,多媒體內容已成為網頁設計不可或缺的一部分,它不僅豐富了用戶的互動體驗,還能顯著提升網站的吸引力和溝通效率。本文將探討多媒體內容對用戶體驗(UX)的影響、SEO最佳實踐與多媒體的整合方法,並提供成功整合多媒體的網站案例。
Thumbnail
透過GraphQL提供的分頁方式,優化後端讀取資料的效能,避免過度讀取舊資料及準確指定特定項目。同時,利用Local-only field達成資料的整理或再次經過計算,提升管理和重複使用的效能。
圖片大小 漂亮的圖片讓人賞心悅目,對網站美化也是一大加分項,但若是為了呈現自家商品或吸引人的圖片搭配文字,而塞進過量的圖片,導致網站本身太重跑得太慢,容易使客人失去耐性。|SEO工具 隨著時代的進步網路速度也與時俱進,但若網站本身太重,就算網路狀況再良好也無法馬上將網站載好,根據統計,大多數人的
Thumbnail
在當代數據驅動的設計領域裡,了解用戶如何與你的網站互動是至關重要的。Microsoft Clarity是一款功能強大的用戶分析工具,它提供的直觀見解可以幫助開發者和設計師深入掌握用戶行為,從而優化用戶體驗和提升網站性能。
Thumbnail
UI(使用者介面)設計對於用戶體驗至關重要。一個好的UI設計可以讓用戶輕鬆地與應用互動,而糟糕的設計則可能導致用戶感到困惑甚至沮喪。本文將探討五個UI 設計在App開發中常見的錯誤,並提供相應的解決策略。
Thumbnail
雖然我之前文章大力讚美SwiftUI的tabView有多好用,無奈專案大部分都是UIKit啊~~~~要在既有專案用Tab架構只能用UITabBarController了 設計這次還出了一個超複雜的UI,陰影+圓角+客製化高度 大套餐 馬上開始吧。 圓角+陰影 重點就是subclass一個