Flutter的性能優(yōu)化

前言

本文是就Flutter的數(shù)據(jù)更新形式來操作,然后通過以觀測觀測臺(tái)的狀態(tài)數(shù)據(jù)報(bào)告,來完成對(duì)代碼執(zhí)行效率的監(jiān)控,并找到突破口。

觀測臺(tái)

不管是Idea還是Android Studio都提供了觀測臺(tái)的功能。
一般我們使用的都是Observatorytimeline部分。


我打開的方式一般都是在terminal中輸入flutter run,如果要使用真機(jī)測試則輸入flutter run --profile。成功后會(huì)出現(xiàn)如圖所示的網(wǎng)址,不過這個(gè)網(wǎng)址適合在Google瀏覽器中進(jìn)行顯示。

一般在timeline中,我們一般選用Flutter Developer的選項(xiàng)。出現(xiàn)的渲染顯示我們一般會(huì)看到gpuui的渲染,以及重構(gòu)過程。

性能優(yōu)化

在性能優(yōu)化之前,我們需要知道Flutter重構(gòu)的邏輯。
Android中我們知道繪制需要的三個(gè)步驟是 measurelayout、draw。
Flutter對(duì)應(yīng)的是buildlayout、paint。
他的重構(gòu)是基于一種標(biāo)臟和重新創(chuàng)建的方式進(jìn)行的,所以我們的性能影響一般來自于一個(gè)復(fù)雜界面的不斷重建??赡苣阒恍枰薷囊粋€(gè)很小的部分,也就是很小的一個(gè)子樹需要進(jìn)行修改,那么在代碼沒有規(guī)范的情況下,可能會(huì)出現(xiàn)整個(gè)界面的刷新,這樣我們的性能可能就要下降了數(shù)倍。
對(duì)于我的代碼而言,就是整個(gè)界面的代碼都得到了重建的,但是這是基于本身代碼還是簡單的原因,如果代碼是非常復(fù)雜的,那會(huì)得到怎樣毀滅性的結(jié)果,也是可想而知。

Snipaste_2020-02-13_13-41-19.png

上文的意思用這張圖來表示,就是本來我們重構(gòu)的就是實(shí)線叉號(hào)的子樹,但是因?yàn)榇a的書寫原因,導(dǎo)致我們的結(jié)果重構(gòu)的虛線叉號(hào)的整棵樹。所以代碼的書寫規(guī)范在性能優(yōu)化上起了至關(guān)重要的作用。

代碼測試

測試代碼位于包test:WanAndroid-Flutter

測試代碼

上圖是我測試的代碼,黑色圖形中的數(shù)據(jù)是通過Timer自動(dòng)更新的。

  int _num = 0;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    Timer.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        _num = timer.tick;
      });
    });
  }

initState()函數(shù)中,我們做了一件事情,就是一個(gè)初始化,并且這是一個(gè)每1s進(jìn)行一次更新的。

在源碼中,這個(gè)數(shù)據(jù)更新處于兩種位置:Main頁面、組件化的_buildBottom。

  • Main頁面:在這個(gè)頁面中,如果重構(gòu),就會(huì)發(fā)生我們上述所說的情況,把整個(gè)頁面全部重構(gòu)了。
  • 組件化的_buildBottomde:將上述的更新代碼轉(zhuǎn)移到這個(gè)組件中,那么重構(gòu)的效果就會(huì)和上述的一樣,當(dāng)然你可以更進(jìn)行細(xì)化。
性能優(yōu)化前
性能優(yōu)化后

通過Observatory的觀測,我們能夠看到兩種位置進(jìn)行更新,他們重構(gòu)所需要進(jìn)行的步驟是完全不一樣的程度的,更何況我的頁面邏輯是處于一個(gè)還算簡單的狀態(tài)呢。

以上就是我的學(xué)習(xí)成果,如果有什么我沒有思考到的地方或是文章內(nèi)存在錯(cuò)誤,歡迎與我分享。


相關(guān)文章推薦:
手撕Flutter

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容