溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

微信小程序怎么解決后臺返回大量多余數(shù)據(jù)的問題

發(fā)布時間:2020-12-21 13:44:10 來源:億速云 閱讀:371 作者:小新 欄目:移動開發(fā)

這篇文章主要介紹微信小程序怎么解決后臺返回大量多余數(shù)據(jù)的問題,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

臺接口返回一個數(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)絡(luò)請求影響大嗎?說實話,不大,又不是幾兆的圖片,返回數(shù)據(jù)的速度反正我感受不到延遲。
但是數(shù)據(jù)量過多對小程序渲染界面有影響嗎?

答案是:有!一般情況下我們是在wxml中循環(huán)data,然后取出item.id和item.name,其他數(shù)據(jù)看起來和我們無關(guān),但是查看官方文檔setData相關(guān)信息的時候有下面這一段話
setData 是小程序開發(fā)中使用最頻繁的接口,也是最容易引發(fā)性能問題的接口。在介紹常見的錯誤用法前,先簡單介紹一下 setData 背后的工作原理。
工作原理

小程序的視圖層目前使用 WebView 作為渲染載體,而邏輯層是由獨(dú)立的 JavascriptCore 作為運(yùn)行環(huán)境。在架構(gòu)上,WebView 和 JavascriptCore 都是獨(dú)立的模塊,并不具備數(shù)據(jù)直接共享的通道。當(dāng)前,視圖層和邏輯層的數(shù)據(jù)傳輸,實際上通過兩邊提供的 evaluateJavascript 所實現(xiàn)。即用戶傳輸?shù)臄?shù)據(jù),需要將其轉(zhuǎn)換為字符串形式傳遞,同時把轉(zhuǎn)換后的數(shù)據(jù)內(nèi)容拼接成一份 JS 腳本,再通過執(zhí)行 JS 腳本的形式傳遞到兩邊獨(dú)立環(huán)境。
而 evaluateJavascript 的執(zhí)行會受很多方面的影響,數(shù)據(jù)到達(dá)視圖層并不是實時的。
其實就是我們setData里面的所有數(shù)據(jù)都被轉(zhuǎn)成了字符串,然后字符串郵費(fèi)轉(zhuǎn)換成JS腳本,然后頁面根據(jù)JS腳本去渲染頁面。那么我們能做的就是盡量少傳數(shù)據(jù),而此時后臺返回這一大串?dāng)?shù)據(jù)就與此相悖了,所以最好是新建一個tempData,將要的數(shù)據(jù)取出來之后再setDta這個tempData,以此來提高微信小程序的頁面渲染速度,提升微信小程序運(yùn)行效率,優(yōu)化微信小程序的用戶體驗。
我們可以這樣寫:

[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)

此時我們再使用setData({})就能提高渲染效率了

同時再分享兩個setData技巧

1、有一個Object如下

obj:{a:"a",b:"b",c:"c"},

此時已經(jīng)渲染到頁面了,然后我們修改了obj,此時可以選擇:

1)平時的做法

let obj = this.data.objobj.b = "我是后來修改的"this.setData({ obj: obj})

2)但是更優(yōu)化的做法是

this.setData({ 'obj.b': "我是后來修改的"})

不僅省了兩行代碼,同時還提高頁面渲染效率2、其實和1差不多,就是Object變成數(shù)組Array當(dāng)我們要給數(shù)組的其中一個數(shù)據(jù)進(jìn)行修改時,我們可以參照上面的方法

this.setData({ 'array[1]': "我是后來修改的"})

當(dāng)我們要給數(shù)組的多個數(shù)據(jù)進(jìn)行修改時,我們會寫一個循環(huán),然后修改array,此時是無法識別的,要寫成如下形式

for(var i = 0;i < 5;i++) { 
 this.setData({ [`array[${i}]`]:"我是后來修改的" 
}) }

以上是“微信小程序怎么解決后臺返回大量多余數(shù)據(jù)的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI