Heim  >  Artikel  >  WeChat-Applet  >  Wie WeChat-Miniprogramme das Problem lösen, im Hintergrund eine große Menge redundanter Daten zurückzugeben

Wie WeChat-Miniprogramme das Problem lösen, im Hintergrund eine große Menge redundanter Daten zurückzugeben

不言
不言Original
2018-08-16 17:20:014072Durchsuche

Der Inhalt dieses Artikels handelt davon, wie das WeChat-Applet das Problem der Rückgabe einer großen Menge redundanter Daten im Hintergrund löst. Ich hoffe, dass es für Sie hilfreich ist .

Die Plattformschnittstelle gibt ein Array zurück. Es gibt N Objekte im Array und jedes Objekt enthält Dutzende oder Hunderte von Daten. Das Interessanteste ist, dass ich nur bestimmte zwei Daten in jedem Objekt benötige.

Ähnlich wie hier:

datas:[
 {
 id:1000,
 name: "帅哥",
 title: '...',
 b: '...',
 d: 0,
 f:0,
 ....
 },
 {
 id:1001,
 name: "美女",
 title: '...',
 b: '...',
 d: 0,
 f:0,
 ....
 },
 ...
]

Eigentlich brauche ich nur die ID und den Namen, und ich kann das Backend finden, um das Problem zu lösen. Wenn Sie gewinnen können, kämpfen Sie einfach und lassen Sie es ändern nach dem Kampf!
Wird die Datenmenge einen großen Einfluss auf Netzwerkanfragen haben? Ehrlich gesagt handelt es sich nicht um ein großes Bild und es handelt sich nicht um ein paar Megabyte an Bildern. Ich kann keine Verzögerung bei der Geschwindigkeit der Datenrückgabe feststellen.
Aber haben zu viele Daten Auswirkungen auf die Rendering-Oberfläche des Miniprogramms?

Die Antwort lautet: Ja! Im Allgemeinen schleifen wir Daten in wxml und nehmen dann item.id und item.name heraus. Andere Daten scheinen nichts mit uns zu tun zu haben, aber wenn wir uns die offiziellen Dokumentsatzdaten ansehen, gibt es den folgenden Absatz
setData Es ist die am häufigsten verwendete Schnittstelle in der Entwicklung kleiner Programme und auch die Schnittstelle, die am wahrscheinlichsten Leistungsprobleme verursacht. Bevor wir auf häufige falsche Verwendungen eingehen, stellen wir kurz das Funktionsprinzip von setData vor.
Funktionsprinzip

Die Ansichtsschicht des Applets verwendet derzeit WebView als Rendering-Träger, während die Logikschicht den unabhängigen JavascriptCore als laufende Umgebung verwendet. Architektonisch sind WebView und JavascriptCore unabhängige Module und verfügen über keine Kanäle für den direkten Datenaustausch. Derzeit wird die Datenübertragung zwischen der Ansichtsschicht und der Logikschicht tatsächlich über das von beiden Parteien bereitgestellte EvaluateJavascript implementiert. Das heißt, die vom Benutzer übertragenen Daten müssen in eine Zeichenfolge umgewandelt und weitergegeben werden. Gleichzeitig wird der konvertierte Dateninhalt in ein JS-Skript gespleißt und dann durch Ausführen an die unabhängige Umgebung auf beiden Seiten übergeben das JS-Skript.
Die Ausführung von „evalueJavascript“ wird von vielen Aspekten beeinflusst, und die Daten, die auf der Ansichtsebene ankommen, erfolgen nicht in Echtzeit.
Tatsächlich werden alle Daten in unserem setData in eine Zeichenfolge konvertiert, und dann wird die Zeichenfolge porto in ein JS-Skript konvertiert, und dann rendert die Seite die Seite gemäß dem JS-Skript. Dann können wir so wenig Daten wie möglich übertragen. Zu diesem Zeitpunkt ist es im Widerspruch dazu, diese große Datenfolge im Hintergrund zurückzugeben. Daher ist es am besten, ein neues tempData zu erstellen und die erforderlichen Daten herauszunehmen , und dann setDta die tempData, um die Seitenrendergeschwindigkeit von WeChat-Miniprogrammen zu verbessern, die Betriebseffizienz von WeChat-Miniprogrammen zu verbessern und die Benutzererfahrung von WeChat-Miniprogrammen zu optimieren.
Wir können so schreiben:

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

oder die Funktion map() höherer Ordnung verwenden:

let tempDatas = datas.map(function(data){
 return {
 id: data.id,
 name: data.name 
 } 
 })
console.log(tempDatas)

Zu diesem Zeitpunkt können wir setData({}) verwenden, um die Rendering-Effizienz zu verbessern

Zwei weitere setData-Techniken gleichzeitig teilen

1. Es gibt ein Objekt wie folgt

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

Zu diesem Zeitpunkt wurde es auf der Seite gerendert und dann Wir haben Obj geändert. Zu diesem Zeitpunkt können Sie wählen:

1) Der übliche Ansatz ist

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

2) Der optimiertere Ansatz ist jedoch

this.setData({ &#39;obj.b&#39;: "我是后来修改的"})

, der nicht nur spart zwei Codezeilen, verbessert aber auch die Seitenrendering-Effizienz 2. Tatsächlich ist es fast dasselbe wie 1, das heißt, Object wird zu einem Array. Wenn wir eines der Daten im Array ändern möchten, können wir darauf verweisen Die obige Methode

this.setData({ &#39;array[1]&#39;: "我是后来修改的"})

Wenn wir mehrere Daten im Array ändern möchten, schreiben wir eine Schleife und ändern dann das Array. Dies ist zu diesem Zeitpunkt nicht erkennbar und sollte in der folgenden Form geschrieben werden

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

Verwandte Empfehlungen:

Code-Implementierung der Formatierungszeit im WeChat-Applet

Das obige ist der detaillierte Inhalt vonWie WeChat-Miniprogramme das Problem lösen, im Hintergrund eine große Menge redundanter Daten zurückzugeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn