Flutter列表性能優(yōu)化

一.內(nèi)存優(yōu)化

1.識別出消耗多余內(nèi)存的圖片

Flutter Inspector:點(diǎn)擊Highlight oversized images肋演,會解碼出那些大小超過展示大小的圖片薪夕,并且系統(tǒng)會將其倒置突出顯示扇谣。

此類圖片會導(dǎo)致性能不佳,尤其是在低端設(shè)備上充活,并且當(dāng)有許多圖片(例如在列表視圖中)時亿眠,這種性能影響可能會增加。

如果圖片使用的大小至少比要求的大128KB会傲,則圖片被視為太大锅棕。

修復(fù)圖片:
<1>.解決此問題的最佳方法是調(diào)整圖片資源文件的大小,使其更小淌山。
<2>.如果這是不可能的裸燎,可以在加載圖片時使用cacheWidthcacheHeight參數(shù),這使引擎以指定大小解碼該圖片泼疑,并減少內(nèi)存使用(解碼和存儲仍然比縮小圖片資源本身更昂貴)德绿。

2.避免在快速滾動時加載圖片

使用官方的ScrollAwareImageProvider組件,會在列表快速滑動時中斷圖片的下載和解碼退渗,從而減少不必要的內(nèi)存占用移稳。

雖然這種方法不能100%解決圖片加載時 OOM 的問題,但是很大程度優(yōu)化了列表中的圖片內(nèi)存占用氓辣,官方提供的數(shù)據(jù)上看理論上可以在原本基礎(chǔ)上節(jié)省出 70% 的內(nèi)存秒裕。

3.不要使用shrinkWraptrue

Flutter團(tuán)隊(duì)將從滑動控件里面棄用shrinkWrap屬性,因?yàn)閳F(tuán)隊(duì)覺得現(xiàn)階段的開發(fā)人員大多數(shù)時候不知道它的實(shí)際含義钞啸,只是單純使用它解決問題几蜻,在使用過程中容易出現(xiàn)錯誤的性能損耗而不自知。

shrinkWrap:true的時候体斩,在滑動控件內(nèi)部會采用一個特殊的ShrinkWrappingViewport窗口進(jìn)行實(shí)現(xiàn)梭稚,ShrinkWrappingViewport是調(diào)整自身大小去匹配主軸方向中Item的大小,這種收縮的行為成本會變高絮吵,因?yàn)榇翱诖笮⌒枰ㄟ^Item去確定弧烤。

shrinkWrap:true會將列表所有的item都構(gòu)建完成,盡管他們還遠(yuǎn)沒有在 ViewPort展示出來蹬敲,所以shrinkWrapListView失去了懶加載的作用暇昂,導(dǎo)致內(nèi)存性能問題。

4.addAutomaticKeepAlivesaddRepaintBoundaries

addAutomaticKeepAlives:true表示將item包裹在AutomaticKeepAlive組件中伴嗡,當(dāng)item滑出屏幕時不會被GC(垃圾回收)急波,會使用KeepAliveNotification來保存其狀態(tài),從而在再次出現(xiàn)在屏幕的時候能夠快速構(gòu)建瘪校。這其實(shí)是一個拿空間換時間的方法澄暮,會造成一定程度的內(nèi)存開銷名段。

addRepaintBoundaries:true表示將item包裹在RepaintBoundary組件中,當(dāng)列表滾動時泣懊,包裹在RepaintBoundary中的item可以避免重繪伸辟,當(dāng)item重繪的開銷特別小時(比如一個顏色塊,一個較短的文本)馍刮,不添加RepaintBoundary反而更高效信夫。

若禁用addAutomaticKeepAlivesaddRepaintBoundaries,會在一定程度上優(yōu)化內(nèi)存渠退,但是這會影響渲染性能忙迁,需要在內(nèi)存和渲染性能之間權(quán)衡。

5.列表中的元素盡可能使用const修飾

使用 const 相當(dāng)于將元素緩存起來實(shí)現(xiàn)共用碎乃,若列表元素某些部分一直保持不變姊扔,那么可以使用 const 修飾。

二.滾動優(yōu)化

1.指定列表項(xiàng)的固定高度

ListViewitemExtent屬性用于指定item的固定高度梅誓,它告訴ListView在構(gòu)建列表時使用固定大小的緩沖區(qū)恰梢。

如果知道item的固定高度,可以講itemExtent設(shè)置為該值梗掰,有利于Flutter更有效的管理列表的布局嵌言,并且在滾動時可以提高性能

2.合理使用緩沖區(qū)

ListView可以通過設(shè)置cacheExtent來設(shè)置預(yù)先加載的內(nèi)容大小及穗。通過預(yù)先加載可以提升view渲染的速度摧茴。但是這個值需要合理設(shè)置,并非越大越好埂陆。因?yàn)轭A(yù)加載緩存越大苛白,對頁面整體內(nèi)存的壓力就越大。

三.渲染優(yōu)化

1.setState狀態(tài)刷新位置盡量放置于視圖樹的低層級焚虱,推薦使用Selector構(gòu)建需要刷新的組件购裙,以維持最小刷新范圍。

2.對于頻繁更新的控件(如動畫)鹃栽,使用RepaintBoundary隔離它躏率,創(chuàng)建單獨(dú)layer減少重繪區(qū)域。

3.使用圖片替換半透明效果民鼓。

4.減少SaveLayer(ShaderMask薇芝、ColorFilterText Overflow)丰嘉、ClipPath的使用恩掷,提高渲染線程性能。

5.避免使用Opacity widget供嚎,尤其是在動畫中避免使用,用AnimatedOpacityFadeInImage進(jìn)行代替。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末克滴,一起剝皮案震驚了整個濱河市逼争,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劝赔,老刑警劉巖誓焦,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異着帽,居然都是意外死亡杂伟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門仍翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赫粥,“玉大人,你說我怎么就攤上這事予借≡狡剑” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵灵迫,是天一觀的道長秦叛。 經(jīng)常有香客問我,道長瀑粥,這世上最難降的妖魔是什么挣跋? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮狞换,結(jié)果婚禮上避咆,老公的妹妹穿的比我還像新娘。我一直安慰自己哀澈,他們只是感情好牌借,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著割按,像睡著了一般膨报。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上适荣,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天现柠,我揣著相機(jī)與錄音,去河邊找鬼弛矛。 笑死够吩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丈氓。 我是一名探鬼主播周循,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼强法,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湾笛?” 一聲冷哼從身側(cè)響起饮怯,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚎研,沒想到半個月后蓖墅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡临扮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年论矾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杆勇。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贪壳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靶橱,到底是詐尸還是另有隱情寥袭,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布关霸,位于F島的核電站传黄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏队寇。R本人自食惡果不足惜膘掰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佳遣。 院中可真熱鬧识埋,春花似錦、人聲如沸零渐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵盼。三九已至惠豺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間风宁,已是汗流浹背洁墙。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戒财,地道東北人热监。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像饮寞,于是被迫代替她去往敵國和親孝扛。 傳聞我的和親對象是個殘疾皇子列吼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容