本文是就Flutter
的數據更新形式來操做,而後經過以觀測觀測臺的狀態數據報告,來完成對代碼執行效率的監控,並找到突破口。git
不論是Idea
仍是Android Studio
都提供了觀測臺的功能。 通常咱們使用的都是Observatory
的timeline
部分。 github
terminal
中輸入
flutter run
,若是要使用真機測試則輸入
flutter run --profile
。成功後會出現如圖所示的網址,不過這個網址適合在Google瀏覽器中進行顯示。
通常在timeline
中,咱們通常選用Flutter Developer
的選項。出現的渲染顯示咱們通常會看到gpu
和ui
的渲染,以及重構過程。 瀏覽器
在性能優化以前,咱們須要知道Flutter
重構的邏輯。 在Android
中咱們知道繪製須要的三個步驟是 measure
、layout
、draw
。 而Flutter
對應的是build
、layout
、paint
。 他的重構是基於一種標髒和從新建立的方式進行的,因此咱們的性能影響通常來自於一個複雜界面的不斷重建。可能你只須要修改一個很小的部分,也就是很小的一個子樹須要進行修改,那麼在代碼沒有規範的狀況下,可能會出現整個界面的刷新,這樣咱們的性能可能就要降低了數倍。 對於個人代碼而言,就是整個界面的代碼都獲得了重建的,可是這是基於自己代碼仍是簡單的緣由,若是代碼是很是複雜的,那會獲得怎樣毀滅性的結果,也是可想而知。性能優化
測試代碼位於包
test
:WanAndroid-Flutteride
Timer
自動更新的。
int _num = 0;
@override
void initState() {
// TODO: implement initState
super.initState();
Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
_num = timer.tick;
});
});
}
複製代碼
在initState()
函數中,咱們作了一件事情,就是一個初始化,而且這是一個每1s進行一次更新的。函數
在源碼中,這個數據更新處於兩種位置:Main頁面、組件化的_buildBottom。組件化
![]() |
![]() |
---|
經過Observatory
的觀測,咱們可以看到兩種位置進行更新,他們重構所須要進行的步驟是徹底不同的程度的,更況且個人頁面邏輯是處於一個還算簡單的狀態呢。post
以上就是個人學習成果,若是有什麼我沒有思考到的地方或是文章內存在錯誤,歡迎與我分享。性能
相關文章推薦: 手撕Flutter學習