React-Native之可配置化的圖片資源預加載方案

背景

在RN開發過程中,我們深受Rn包體積的擴大而困擾。爲了優化包體積,最直接的方式莫過於減少本地資源的引用(將資源上傳到雲端)。然而雖然包的體積大大減小,但伴隨而來的則是由於網絡延時導致的加載緩慢,進而引發嚴重的體驗問題,結果自然就是得不償失。那麼如何解決這樣的問題呢,就需要一套可行的資源預加載方案。下面我們將着重討論圖片資源的預加載方案。

解決方案

1、圖片預加載
React-Native官方Image組件已經提供了prefetch的方法來支持圖片預加載,其具體使用如下:
	//  1、通過調用Image.prefetch方法,拿到圖片預加載的Promise對象,這個時候還未實現圖片預加載
	let prefetchTask = Image.prefetch('www.baidu.com");
	
	// 2、通過調用prefetchTask的then方法,來實現圖片預加載
	prefetchTask.then(() => {
		// todo 圖片預加載完成後,需要做的後續操作在這裏實現
	});
2、可配置化

上面介紹了圖片的預加載方案,但是還有一個重大缺陷尚未解決,那就是可配置化的圖片預加載。在一般的項目實踐中,我們總是遇到各種各樣的圖片展示問題,如“弱網情況下,圖片出現較慢“、“有些彈窗的背景還沒出來,彈窗就展示了”等等一系列體驗問題,但是我們又不能每次都通過發佈代碼來實現圖片的預加載,這個時候就需要支持配置化的圖片預加載。

具體實現如下:

   // 圖片預加載工具類
   function preLoadImage(imgs = [], callback){
    let promises = [];
    imgs.forEach((url,idx) => {
        if(url){
            promises.push(Image.prefetch(url));
        }
    })
    Promise.all(promises).then(([...res]) => {
        callback && callback();
    });
    // 通過獲取配置來實現圖片預加載(可接入業務方各自管理的配置後臺,一般互聯網公司都會有這樣的基礎配置後臺)
    
}
 // 我這裏會寫一個prefetch.js文件,裏面是一個自執行函數,這樣可以實現隨時引用,隨時實現預加載,與業務解耦
	 (async function(){
	    // 接入配置後臺(大家可接入自己的)
	    const prefetchImgConfig = await getAppConfigByKeyV1('needPrefetchImgConfig', {});
	    // common 公共圖片
	    // 其他的是各自馬甲包圖片
	    let { common =[], zz=[], tt=[] } = prefetchImgConfig;
	    let originImgs = [];
	    if(isZX()){
	        originImgs = [...common, ...zz];
	    } else {
	        originImgs = [...common, ...tt];
	    }
	    // 去重處理
	    let allImgs = new Set([...originImgs, ...localImgs ]);
	    preLoadImage(allImgs);
	})();

基於上面的實現,既是一個完整的圖片預加載解決方案。希望對大家有用。更多精彩,請繼續關注我哦。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章