shouldComponentUpdate
確保組件在渲染之后不需要再更新的,即靜態組件,盡量在其中增加shouldComponentUpdate方法,防止二次消耗所產生的性能消耗
shouldComponentUpdate() {
//完全靜態的組件,無需更新
return false;
}
key
key是react的一個特殊的屬性,它是給React自己用的。如果我們動態地創建 React 元素,而且 React 元素內包含數量或順序不確定的子元素時,我們就需要提供 key 這個特殊的屬性。(包括ListView 和 ScrollView)。
我們知道,當組件的屬性發生了變化,其 render 方法會被重新調用,組件會被重新渲染。但是在渲染之前,react都會進行diff,確保高效率的渲染,而這個唯一的key就很好的為每一個react組件確定了id。React會比較更新前后的元素 key 值,如果相同則更新,如果不同則銷毀之前的,重新創建一個元素。
渲染性能低效
基於ScrollView和ListView兩大容器,在渲染上,相當於web端的table布局,需要等整個大table渲染完成才顯示頁面,也就是說,當容器內有大量的子元素,其白屏時間會非常長。
采用異步渲染的方式,減少首屏加載的數據,實現數據懶加載,使用requestAnimationFrame 或 setTimeout 定時將單個組件push進ScrollView容器。
setNativeProps
使用該方法修改 View 、 Text 等 RN自帶的組件 ,則不會觸發組件的componentWillReceiveProps 、 shouldComponentUpdate 、 componentWillUpdate 等組件生命周期中的方法。
建議頻繁更新的操作,如tabs切換操作時,需要更新改tab的style,則可以使用該屬性。
代碼片段:
me.refs.tabView.setNativeProps({
style : {
height : 0,
opacity : 0
}
});
最小化DOM
類似於html,React Native里虛擬dom結構越復雜,則越低效。
不要使用陰影效果
React Native 里面的 shadow 相關的樣式,是非常耗性能的css屬性
參考文章:
React Native 性能優化建議
