后臺接口返回一個數(shù)組咱揍,數(shù)組里面N多對象颖榜,每個對象里面幾十上百條數(shù)據(jù),最好玩的是煤裙,我只需要每個對象里面的某兩個數(shù)據(jù)掩完、、硼砰、且蓬、
類似這種:
datas:[
{
id:1000,
name: "帥哥",
title: '...',
b: '...',
d: 0,
f:0,
....
},
{
id:1001,
name: "美女"题翰,
title: '...',
b: '...',
d: 0,
f:0,
....
},
...
]
其實我只要id和name恶阴,找后臺解決、豹障、冯事、算了吧,奈何天生就是個儒生血公,溫文爾雅昵仅,打架是打不贏的,要是能打贏的就直接打吧累魔,打完讓他們改摔笤!
數(shù)據(jù)量過多,對網(wǎng)絡請求影響大嗎垦写?說實話吕世,不大,又不是幾兆的圖片梯投,返回數(shù)據(jù)的速度反正我感受不到延遲命辖。
但是數(shù)據(jù)量過多對小程序渲染界面有影響嗎?
答案是:有分蓖!
一般情況下我們是在wxml中循環(huán)data尔艇,然后取出item.id和item.name,其他數(shù)據(jù)看起來和我們無關,但是查看官方文檔setData相關信息的時候有下面這一段話
setData 是小程序開發(fā)中使用最頻繁的接口咆疗,也是最容易引發(fā)性能問題的接口漓帚。在介紹常見的錯誤用法前,先簡單介紹一下 setData 背后的工作原理午磁。
工作原理
小程序的視圖層目前使用 WebView 作為渲染載體尝抖,而邏輯層是由獨立的 JavascriptCore 作為運行環(huán)境毡们。在架構上,WebView 和 JavascriptCore 都是獨立的模塊昧辽,并不具備數(shù)據(jù)直接共享的通道衙熔。當前,視圖層和邏輯層的數(shù)據(jù)傳輸搅荞,實際上通過兩邊提供的 evaluateJavascript 所實現(xiàn)红氯。即用戶傳輸?shù)臄?shù)據(jù),需要將其轉換為字符串形式傳遞咕痛,同時把轉換后的數(shù)據(jù)內容拼接成一份 JS 腳本痢甘,再通過執(zhí)行 JS 腳本的形式傳遞到兩邊獨立環(huán)境。
而 evaluateJavascript 的執(zhí)行會受很多方面的影響茉贡,數(shù)據(jù)到達視圖層并不是實時的塞栅。
其實就是我們setData里面的所有數(shù)據(jù)都被轉成了字符串,然后字符串郵費轉換成JS腳本腔丧,然后頁面根據(jù)JS腳本去渲染頁面放椰。
那么我們能做的就是盡量少傳數(shù)據(jù),而此時后臺返回這一大串數(shù)據(jù)就與此相悖了愉粤,所以最好是新建一個tempData,將要的數(shù)據(jù)取出來之后再setDta這個tempData砾医,以此來提高微信小程序的頁面渲染速度,提升微信小程序運行效率衣厘,優(yōu)化微信小程序的用戶體驗如蚜。
我們可以這樣寫:
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)
或者使用高階函數(shù)map():
let tempDatas = datas.map(function(data){
return {
id: data.id,
name: data.name
}
})
console.log(tempDatas)
此時我們再使用setData({})就能提高渲染效率了
以上就是微信小程序開發(fā)中關于后臺返回大量冗余數(shù)據(jù)的處理方案啦,在一定程度上是能提升微信小程序的運行效率的头滔,當然最最最直接的方法就是和后臺打一架怖亭,誰輸了誰去優(yōu)化代碼O严浴@ぜ臁!期吓!
同時再分享兩個setData技巧
1早歇、有一個Object如下
obj:{a:"a",b:"b",c:"c"},
此時已經(jīng)渲染到頁面了,然后我們修改了obj,此時可以選擇:
1)平時的做法
let obj = this.data.obj
obj.b = "我是后來修改的"
this.setData({
obj: obj
})
2)但是更優(yōu)化的做法是
this.setData({
'obj.b': "我是后來修改的"
})
不僅省了兩行代碼讨勤,同時還提高頁面渲染效率
2箭跳、其實和1差不多,就是Object變成數(shù)組Array
當我們要給數(shù)組的其中一個數(shù)據(jù)進行修改時潭千,我們可以參照上面的方法
this.setData({
'array[1]': "我是后來修改的"
})
當我們要給數(shù)組的多個數(shù)據(jù)進行修改時谱姓,我們會寫一個循環(huán),然后修改array[i],此時是無法識別的,要寫成如下形式
for(var i = 0;i < 5;i++) {
this.setData({
[`array[${i}]`]:"我是后來修改的"
})
}
小伙伴們還有其他有關微信小程序setData的其他知識點刨晴,歡迎留言哦屉来,同時知道為上面那個為啥要加 []
的路翻,希望多多指教!
賞我一個贊吧~~~