這篇文章主要介紹微信小程序怎么解決后臺(tái)返回大量多余數(shù)據(jù)的問(wèn)題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
臺(tái)接口返回一個(gè)數(shù)組,數(shù)組里面N多對(duì)象,每個(gè)對(duì)象里面幾十上百條數(shù)據(jù),好玩的是,我只需要每個(gè)對(duì)象里面的某兩個(gè)數(shù)據(jù)、、、、
類(lèi)似這種:
datas:[ { id:1000, name: "帥哥", title: '...', b: '...', d: 0, f:0, .... }, { id:1001, name: "美女", title: '...', b: '...', d: 0, f:0, .... }, ... ]
其實(shí)我只要id和name,找后臺(tái)解決、、、算了吧,奈何天生就是個(gè)儒生,溫文爾雅,打架是打不贏的,要是能打贏的就直接打吧,打完讓他們改!
數(shù)據(jù)量過(guò)多,對(duì)網(wǎng)絡(luò)請(qǐng)求影響大嗎?說(shuō)實(shí)話,不大,又不是幾兆的圖片,返回?cái)?shù)據(jù)的速度反正我感受不到延遲。
但是數(shù)據(jù)量過(guò)多對(duì)小程序渲染界面有影響嗎?
答案是:有!一般情況下我們是在wxml中循環(huán)data,然后取出item.id和item.name,其他數(shù)據(jù)看起來(lái)和我們無(wú)關(guān),但是查看官方文檔setData相關(guān)信息的時(shí)候有下面這一段話
setData 是小程序開(kāi)發(fā)中使用最頻繁的接口,也是最容易引發(fā)性能問(wèn)題的接口。在介紹常見(jiàn)的錯(cuò)誤用法前,先簡(jiǎn)單介紹一下 setData 背后的工作原理。
工作原理
小程序的視圖層目前使用 WebView 作為渲染載體,而邏輯層是由獨(dú)立的 JavascriptCore 作為運(yùn)行環(huán)境。在架構(gòu)上,WebView 和 JavascriptCore 都是獨(dú)立的模塊,并不具備數(shù)據(jù)直接共享的通道。當(dāng)前,視圖層和邏輯層的數(shù)據(jù)傳輸,實(shí)際上通過(guò)兩邊提供的 evaluateJavascript 所實(shí)現(xiàn)。即用戶(hù)傳輸?shù)臄?shù)據(jù),需要將其轉(zhuǎn)換為字符串形式傳遞,同時(shí)把轉(zhuǎn)換后的數(shù)據(jù)內(nèi)容拼接成一份 JS 腳本,再通過(guò)執(zhí)行 JS 腳本的形式傳遞到兩邊獨(dú)立環(huán)境。
而 evaluateJavascript 的執(zhí)行會(huì)受很多方面的影響,數(shù)據(jù)到達(dá)視圖層并不是實(shí)時(shí)的。
其實(shí)就是我們setData里面的所有數(shù)據(jù)都被轉(zhuǎn)成了字符串,然后字符串郵費(fèi)轉(zhuǎn)換成JS腳本,然后頁(yè)面根據(jù)JS腳本去渲染頁(yè)面。那么我們能做的就是盡量少傳數(shù)據(jù),而此時(shí)后臺(tái)返回這一大串?dāng)?shù)據(jù)就與此相悖了,所以好是新建一個(gè)tempData,將要的數(shù)據(jù)取出來(lái)之后再setDta這個(gè)tempData,以此來(lái)提高微信小程序的頁(yè)面渲染速度,提升微信小程序運(yùn)行效率,優(yōu)化微信小程序的用戶(hù)體驗(yàn)。
我們可以這樣寫(xiě):
[mw_shl_code=applescript,true] var tempData = [] for(var i = 0; i < datas.length; i++) { var tempObj = {} tempObj.id = datas[i].id tempObj.name = datas[i].name tempData.push(tempObj) } console.log(tempData) [/mw_shl_code]
或者使用高階函數(shù)map():
let tempDatas = datas.map(function(data){ return { id: data.id, name: data.name } }) console.log(tempDatas)
此時(shí)我們?cè)偈褂胹etData({})就能提高渲染效率了
同時(shí)再分享兩個(gè)setData技巧
1、有一個(gè)Object如下
obj:{a:"a",b:"b",c:"c"},
此時(shí)已經(jīng)渲染到頁(yè)面了,然后我們修改了obj,此時(shí)可以選擇:
1)平時(shí)的做法
let obj = this.data.objobj.b = "我是后來(lái)修改的"this.setData({ obj: obj})
2)但是更優(yōu)化的做法是
this.setData({ 'obj.b': "我是后來(lái)修改的"})
不僅省了兩行代碼,同時(shí)還提高頁(yè)面渲染效率2、其實(shí)和1差不多,就是Object變成數(shù)組Array當(dāng)我們要給數(shù)組的其中一個(gè)數(shù)據(jù)進(jìn)行修改時(shí),我們可以參照上面的方法
this.setData({ 'array[1]': "我是后來(lái)修改的"})
當(dāng)我們要給數(shù)組的多個(gè)數(shù)據(jù)進(jìn)行修改時(shí),我們會(huì)寫(xiě)一個(gè)循環(huán),然后修改array,此時(shí)是無(wú)法識(shí)別的,要寫(xiě)成如下形式
for(var i = 0;i < 5;i++) { this.setData({ [`array[${i}]`]:"我是后來(lái)修改的" }) }
以上是“微信小程序怎么解決后臺(tái)返回大量多余數(shù)據(jù)的問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)題目:微信小程序怎么解決后臺(tái)返回大量多余數(shù)據(jù)的問(wèn)題-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://www.chinadenli.net/article41/jjohd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容