微信小程序請(qǐng)求前置的方法詳解
問(wèn)題
因?yàn)槲覀冇械捻?yè)面是在onload中去請(qǐng)求數(shù)據(jù)回來(lái)再渲染視圖,如果我們可以將請(qǐng)求數(shù)據(jù)這一步提前到小程序頁(yè)面跳轉(zhuǎn)前做,就可以早一點(diǎn)把數(shù)據(jù)請(qǐng)求回來(lái),優(yōu)化的效果取決于頁(yè)面跳轉(zhuǎn)所需的時(shí)間。
需求
需要一種請(qǐng)求前置方法充分利用跳轉(zhuǎn)的時(shí)間,預(yù)先請(qǐng)求接口數(shù)據(jù),但是要盡量減少對(duì)舊項(xiàng)目的改造成本。因?yàn)楝F(xiàn)在我負(fù)責(zé)的小程序項(xiàng)目是用axios來(lái)請(qǐng)求接口數(shù)據(jù),所以這里只舉例axios中post的改造的思路。我這里是通過(guò)改寫post方法,在請(qǐng)求的時(shí)候?qū)π枰A(yù)先請(qǐng)求的接口進(jìn)行緩存,等第二次請(qǐng)求的時(shí)候返回第一次請(qǐng)求的promise,從而不用再發(fā)起新請(qǐng)求。
具體步驟
1、改造post方法
http文件
let instance = axios.create({ // 創(chuàng)建axios請(qǐng)求實(shí)例
// 省略部分代碼
});
let { post } = instance; // 保存原本的post方法
let cache = {}; // 請(qǐng)求緩存
instance.post = function(...list) {
let [url, data = {}] = list;
if (cache[url]) { // 返回預(yù)請(qǐng)求的promise
let pre = cache[url];
delete cache[url];
return pre;
}
if (data.pre) { //以pre作為是否是預(yù)請(qǐng)求
delete data.pre;
cache[url] = post(...list)
return cache[url];
}
return post(...list); //普通的請(qǐng)求
}
2、使用
跳轉(zhuǎn)前的頁(yè)面,即上一個(gè)頁(yè)面
// 省略部分代碼 ...
// 這是在下個(gè)頁(yè)面要去請(qǐng)求接口的數(shù)據(jù),提前在wx.navigateTo跳轉(zhuǎn)前請(qǐng)求,并存儲(chǔ)下來(lái)。
$http.post('/act/activities/lucky:search', { activityId: 12 , pre: true })
wx.nextTick(() => { //使用wx.nextTick是讓上面的請(qǐng)求先發(fā)出再跳轉(zhuǎn)
wx.navigateTo({
url: `${TYPE_TO_ROUTE_MAP[templateType]}?id=${activity.activityId}`
});
})
// 省略部分代碼 ...
效果
未使用預(yù)加載

使用預(yù)加載

兩者紅色框的寬度差,表示的是提前了多少時(shí)間去請(qǐng)求接口數(shù)據(jù),大概在100ms左右。因?yàn)橄旅娴撵o態(tài)資源地址來(lái)自于接口的數(shù)據(jù),相當(dāng)于減少了堵塞后面資源加載100ms左右。
總結(jié)
- 這個(gè)原理就是利用小程序跳轉(zhuǎn)這部分時(shí)間提前請(qǐng)求數(shù)據(jù),所以對(duì)于性能差的手機(jī)受益會(huì)大一些,雖然在開發(fā)者工具看起來(lái)能省個(gè)100ms左右,但是存在以下兩個(gè)限制
- 頁(yè)面加載完成需要預(yù)請(qǐng)求的接口數(shù)據(jù)里的數(shù)據(jù)
- 需要在上一個(gè)頁(yè)面發(fā)起預(yù)請(qǐng)求,并對(duì)跳轉(zhuǎn)做nextTick處理
導(dǎo)致這個(gè)優(yōu)化的收益對(duì)整個(gè)項(xiàng)目來(lái)說(shuō)確實(shí)有些雞肋。
到此這篇關(guān)于微信小程序請(qǐng)求前置的文章就介紹到這了,更多相關(guān)小程序請(qǐng)求前置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS+CSS實(shí)現(xiàn)帶關(guān)閉按鈕DIV彈出窗口的方法
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)帶關(guān)閉按鈕DIV彈出窗口的方法,實(shí)例分析了div彈出層窗口的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
微信小程序?qū)崿F(xiàn)可拖動(dòng)懸浮圖標(biāo)(包括按鈕角標(biāo)的實(shí)現(xiàn))
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)可拖動(dòng)懸浮圖標(biāo)(包括按鈕角標(biāo)的實(shí)現(xiàn)),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
JS實(shí)現(xiàn)淡藍(lán)色簡(jiǎn)潔豎向Tab點(diǎn)擊切換效果
這篇文章主要介紹了JS實(shí)現(xiàn)淡藍(lán)色簡(jiǎn)潔豎向Tab點(diǎn)擊切換效果,通過(guò)JavaScript相應(yīng)鼠標(biāo)事件實(shí)現(xiàn)非常簡(jiǎn)單的css樣式切換,簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-10-10
JavaScript對(duì)表格或元素按文本,數(shù)字或日期排序的方法
這篇文章主要介紹了JavaScript對(duì)表格或元素按文本,數(shù)字或日期排序的方法,涉及javascript頁(yè)面元素操作及排序的相關(guān)技巧,需要的朋友可以參考下2015-05-05
手機(jī)圖片預(yù)覽插件photoswipe.js使用總結(jié)
這篇文章主要為大家詳細(xì)總結(jié)了手機(jī)圖片預(yù)覽插件photoswipe.js使用方法,感興趣的小伙伴們可以參考一下2016-08-08
javascript獲取dom的下一個(gè)節(jié)點(diǎn)方法
這篇文章主要介紹了javascript獲取dom的下一個(gè)節(jié)點(diǎn)方法,實(shí)現(xiàn)在頁(yè)面點(diǎn)擊加減按鈕數(shù)字的累加,需要的朋友可以參考下2014-09-09
JavaScript驗(yàn)證一個(gè)url的方法總結(jié)
最近遇到幾次需要校驗(yàn)URL的,使用這篇文章小編就為大家整理了一下幾個(gè)JavaScript校驗(yàn)URL的方法,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以了解一下2023-12-12
解決npm安裝Electron緩慢網(wǎng)絡(luò)超時(shí)導(dǎo)致失敗的問(wèn)題
下面小編就為大家分享一篇解決npm安裝Electron緩慢網(wǎng)絡(luò)超時(shí)導(dǎo)致失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

