RN首次加載都會有個白屏過程,一般都會有500ms+的白屏時間,原生頁面開發同樣的頁面會能夠快速顯示而在RN頁面中有個明顯的等待過程,這個會影響用戶體驗。
1.使用過渡頁面
簡單處理可以在白屏過程中加個過度頁面,通過設置RCTRootView的loadingView添加默認的加載過程
/** * A view to display while the JavaScript is loading, so users aren't presented * with a blank screen. By default this is nil, but you can override it with * (for example) a UIActivityIndicatorView or a placeholder image. */ @property (nonatomic, strong) UIView *loadingView;
2.統一加載效果
一般頁面數據從服務器獲取,會有網絡請求,可以將上面的loadingView和網絡請求的loading效果統一。雖然並沒有減少加載時間,但是可以給用戶一直在請求數據的錯覺,類似原生的交互效果。
3.並發操作
由於RN頁面網絡請求從request到response也會有個時間段,考慮將原生模塊發送網絡請求和RN加載並發操作,等待網絡數據獲取成功后重新渲染頁面。
注:1.需要rootview初始化的同時發起網絡請求,需要提前預置網絡請求的接口和參數,建議將RN的業務進行統一入口處理,通過設置config數據或者前置傳入。
2.由於並發操作,可能會出現兩種情況,一種render臨時界面結束網絡請求數據還沒有,需要等待數據返回再re-render,第二種網絡請求數據已經返回RN初始化加載還沒有完成,需要主動去原生模塊去獲取數據。
4. 頁面數據緩存
如果頁面實時性要求不高,可以用緩存數據來render臨時頁面。
5.共享RCTBridge
可以通過共享RCTBridge來初始化rootview,提前初始化RCTBridge,在iOS可以避免多次初始化JSCORE,不過這樣會出現一些其他問題,后續再分析。。。