RN-效能優化 (一)

weixin_34146805發表於2017-04-25

前人種樹後人乘涼
原文地址

一、非同步逐層渲染。

React Native 雖然一直標榜媲美Native的體驗,但實際使用下來,其渲染性還是非常低效,基於ScrollView和ListView兩大容器,在渲染上,相當於web端的table佈局,需要等整個大table渲染完成才顯示頁面,也就是說,當容器內有大量的子元素,其白屏時間會非常長

二、實現shouldComponentUpdate方法

如上第一點,逐層渲染提升開啟時間,但是也會導致component重複渲染,也就是執行了大量無用的diff演算法。雖然React裡引以為傲的diff演算法非常高效,但是執行數量達到一定程度後,也會帶來非常大的影響。那麼可使用shouldComponentUpdate來控制component的渲染次數。

如果確定該元件渲染完後 無需再次更新 ,即這個元件是一個 靜態元件 ,那麼可以直接return false

shouldComponentUpdate(){
    return false
}

三、使用setNativeProps方法

setNativeProps方法可以理解為web的直接修改dom。使用該方法修改View、Text等RN自帶的元件,則不會觸發元件的componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate等元件生命週期中的方法。

建議頻繁更新的操作,如slider、tabs切換等拖曳操作時,使用setNativeProps來更新屬性,會獲得意想不到的效能體驗。

 //修改文字輸入框的 屬性值
      this.refs.textInputRefer.setNativeProps({
        editable:false
      });

//修改文字輸入框的 style
      this.refs.text2.setNativeProps({
        style:{
          color:'blue',
          fontSize:30
        }
      });

四、不要使用陰影效果

React Native 裡面的 shadow相關的樣式,是非常耗效能的css屬性。這在web上,以前android 2.0年代,也是一樣耗效能的css屬性之一。如果需要使用陰影效果,建議使用圖片來代替反而效能更好一些。

五、最小化DOM

React Native裡虛擬dom結構越複雜,則越低效。如果層級結構大於5級,則要考慮下優化了。這沒啥技巧,純靠經驗及硬實力

六、元件粒度化

如何更好的劃分元件粒度,這需要合理的對元件進行更細粒度的劃分,區分出靜態元件及動態元件。

相關文章