概述
在項目開發(fā)中離不了的需要進(jìn)行一些異步操作神汹,這些異步操作在改善用戶體驗的同時也帶來了一些性能隱患曹仗。比如被冒,在某頁面進(jìn)行異步操作,異步操作還沒有完成時轮蜕,該頁面已經(jīng)關(guān)閉昨悼,這時由于異步操作的存在,導(dǎo)致系統(tǒng)無法及時的回收資源跃洛,從而導(dǎo)致性能的降低率触,甚至出現(xiàn)oom』憬撸總而言之葱蝗,異步操作在改善用戶體驗穴张,增強(qiáng)系統(tǒng)靈活性的同時也帶來了一些性能隱患,如果使用不當(dāng)則會帶來一些副作用两曼。
那么如何在使用異步操作的同
進(jìn)行等使用問題皂甘。
所以我們需要在編程中學(xué)會“舍得”,在適當(dāng)?shù)臅r候去取消一些異步操作悼凑。
為Promise插上可取消的翅膀
Promise是React Native開發(fā)過程中用于異步操作的最常用的API偿枕,但Promise沒有提供用于取消異步操作的方法。為了實現(xiàn)可取消的異步操作户辫,我們可以為Promise包裹一層可取消的外衣渐夸。
然后可以這樣使用取消操作:
上述方法,可以為異步操作添加可取消的功能渔欢,但是使用還是不夠方便:在每個使用makeCancelable的頁面都需要復(fù)制粘貼上述代碼墓塌。
下面我們做一下改進(jìn),將上述代碼抽離到一個文件中奥额。
這樣在使用的時候只需要將makeCancelable導(dǎo)入到你的相應(yīng)js文件中就可以了苫幢。
import??? makeCancelable??? from'../util/Cancelable'
可取消的網(wǎng)絡(luò)請求fetch
fetch是React Native開發(fā)過程中最常用的網(wǎng)絡(luò)請求API,和Promis一樣披坏,fetch也沒有提供用于取消已發(fā)出的網(wǎng)絡(luò)請求的API态坦。因為fetch返回的是一個Promise,所以我們可以借助上述方法棒拂,?來取消fetch所發(fā)出的網(wǎng)絡(luò)請求伞梯。
取消網(wǎng)絡(luò)請求:
this.cancelable.cancel();
在項目中的使用:
為了提高React Native應(yīng)用的性能,我們需要在組件卸載的時候不僅要主動釋放掉所持有的資源帚屉,也要取消所發(fā)出的一些異步請求操作谜诫。
component?? WillUnmount() {?? this.cancelable.cancel();?? }