Lassen Sie uns heute darüber sprechen. Wenn das Backend tatsächlich 100.000 Daten an das Frontend zurückgibt, wie können wir sie dann elegant auf dem Frontend anzeigen? VorarbeitMachen Sie zuerst die Vorarbeit, dann können Sie es später testen. Backend-Konstruktion Erstellen Sie eine neue Wenn // server.js const http = erfordern('http'). konstanter Port = 8000; http.createServer(Funktion (Anforderung, Res) { // Cors aktivieren res.writeHead(200, { //Legen Sie den Domänennamen fest, der domänenübergreifend zulässig ist. Sie können auch * festlegen, um alle Domänennamen zuzulassen. 'Access-Control-Allow-Origin': '*', //Domänenübergreifend zulässige Anforderungsmethoden. Sie können * auch so festlegen, dass alle Methoden zulässig sind "Access-Control-Allow-Methods": "DELETE,PUT,POST,GET,OPTIONS", //Erlaubte Header-Typen 'Access-Control-Allow-Headers': 'Content-Type' }) lass Liste = [] sei num = 0 // Eine Liste mit 100.000 Datensätzen erstellen für (sei i = 0; i < 1000000; i++) { Zahl++ Liste.push({ Quelle: 'https://p3-passport.byteacctimg.com/img/user-avatar/d71c38d1682c543b33f8d716b3b734ca~300x300.image', Text: „Ich bin Gast Nummer ${num} Lin Sanxin“, tid: Nummer }) } res.end(JSON.stringify(Liste)); }).listen(Port, Funktion () { console.log('Server lauscht auf Port ' + Port); }) Frontend-Seite Erstellen Sie zunächst eine neue // index.html // Stil <Stil> * { Polsterung: 0; Rand: 0; } #Behälter { Höhe: 100vh; Überlauf: automatisch; } .Sonnenschein { Anzeige: Flex; Polsterung: 10px; } img { Breite: 150px; Höhe: 150px; } </Stil> // HTML-Teil <body> <div id="Behälter"> </div> <script src="./index.js"></script> </body> Erstellen Sie dann eine neue // index.js // Anforderungsfunktion const getList = () => { returniere neues Promise((lösen, ablehnen) => { //Schritt 1: Asynchrones Objekt erstellen var ajax = new XMLHttpRequest(); //Schritt 2: Legen Sie die Anforderungs-URL-Parameter fest. Parameter 1 ist der Anforderungstyp und Parameter 2 ist die Anforderungs-URL. Sie können ajax.open('get', 'http://127.0.0.1:8000'); verwenden. //Schritt 3: Anfrage senden ajax.send(); //Schritt 4: Registrieren Sie das Ereignis onreadystatechange. Wenn sich der Status ändert, ajax.onreadystatechange = function () { wenn (ajax.readyState == 4 und ajax.status == 200) { //Schritt 5 Wenn Sie bis zu diesem Punkt gelangen, bedeutet das, dass die Daten einwandfrei zurückgegeben werden und die angeforderte Seite existiert. resolve(JSON.parse(ajax.responseText)) } } }) } // Containerobjekt abrufen const container = document.getElementById('container') Direktes Rendering Der direkteste Weg ist das direkte Rendern, aber dieser Ansatz ist definitiv nicht ratsam, da das Rendern const renderList = async () => { console.time('Listenzeit') const list = warte auf getList() Liste.fürJeden(Element => { const div = Dokument.createElement('div') div.className = "Sonnenschein" div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>` container.anhängenKind(div) }) console.timeEnd('Listenzeit') } renderList() setTimeout Seitendarstellung Diese Methode besteht darin, const renderList = async () => { console.time('Listenzeit') const list = warte auf getList() console.log(Liste) const total = Liste.Länge Konstante Seite = 0 Konstantengrenze = 200 const totalPage = Math.ceil(Gesamt / Limit) const render = (Seite) => { if (Seite >= Gesamtseite) return setzeTimeout(() => { für (sei i = Seite * Limit; i < Seite * Limit + Limit; i++) { const Element = Liste[i] const div = Dokument.createElement('div') div.className = "Sonnenschein" div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>` container.anhängenKind(div) } rendern(Seite + 1) }, 0) } rendern(Seite) console.timeEnd('Listenzeit') } AnfrageAnimationFrame Die Verwendung const renderList = async () => { console.time('Listenzeit') const list = warte auf getList() console.log(Liste) const total = Liste.Länge Konstante Seite = 0 Konstantengrenze = 200 const totalPage = Math.ceil(Gesamt / Limit) const render = (Seite) => { if (Seite >= Gesamtseite) return // Verwenden Sie requestAnimationFrame anstelle von setTimeout requestAnimationFrame(() => { für (sei i = Seite * Limit; i < Seite * Limit + Limit; i++) { const Element = Liste[i] const div = Dokument.createElement('div') div.className = "Sonnenschein" div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>` container.anhängenKind(div) } rendern(Seite + 1) }, 0) } rendern(Seite) console.timeEnd('Listenzeit') } Dokumentfragmente + requestAnimationFrameVorteile der Dokumentfragmentierung 1. Bisher wurde 2. Die Seite rendert nur die vom Dokumentfragment umschlossenen Elemente, nicht jedoch das Dokumentfragment selbst. const renderList = async () => { console.time('Listenzeit') const list = warte auf getList() console.log(Liste) const total = Liste.Länge Konstante Seite = 0 Konstantengrenze = 200 const totalPage = Math.ceil(Gesamt / Limit) const render = (Seite) => { if (Seite >= Gesamtseite) return requestAnimationFrame(() => { // Ein Dokumentfragment erstellen const fragment = document.createDocumentFragment() für (sei i = Seite * Limit; i < Seite * Limit + Limit; i++) { const Element = Liste[i] const div = Dokument.createElement('div') div.className = "Sonnenschein" div.innerHTML = `<img src="${item.src}" /><span>${item.text}</span>` // Zuerst das Dokumentfragment einfügen fragment.appendChild(div) } // Einmaliges appendChild container.appendChild(fragment) rendern(Seite + 1) }, 0) } rendern(Seite) console.timeEnd('Listenzeit') } Lazy Loading Für eine allgemeinere Erklärung starten wir ein Tatsächlich ist das Implementierungsprinzip sehr einfach. Lassen Sie es uns anhand eines Bildes zeigen. Setzen Sie am Ende der Liste einen leeren Knoten Um festzustellen, ob in der Ansicht <script setup lang="ts"> importiere { onMounted, ref, berechnet } von 'vue' const getList = () => { //Gleicher Code wie oben} const container = ref<HTMLElement>() // Containerknoten const blank = ref<HTMLElement>() // leerer Knoten const list = ref<any>([]) // Liste const page = ref(1) // aktuelle Seitenzahl const limit = 200 // Anzeige einer Seite // maximale Seitenzahl const maxPage = computed(() => Math.ceil(list.value.length / limit)) // Die tatsächlich angezeigte Liste const showList = computed(() => list.value.slice(0, page.value * limit)) const handleScroll = () => { // Vergleich der aktuellen Seitenzahl und der maximalen Seitenzahl if (page.value > maxPage.value) return const clientHeight = container.Wert?.clientHeight const blankTop = blank.Wert?.getBoundingClientRect().top wenn (Clienthöhe === blankTop) { // In der Ansicht erscheint ein Leerzeichen, die aktuelle Seitenzahl wird um 1 erhöht Seite.Wert++ } } beimMounted(async () => { const res = warte auf getList() Liste.Wert = Res }) </Skript> <Vorlage> <div Klasse="Container" @scroll="handleScroll" ref="Container"> <div Klasse="Sonnenschein" v-for="(Artikel) in ShowList" :key="Artikel.tid"> <img :src="item.src" /> <span>{{ Artikel.text }}</span> </div> <div ref="blank"></div> </div> </Vorlage> Oben sind die Details, wie das Front-End die 100.000 Daten, die vom Back-End zurückgegeben werden, besser anzeigen kann. Weitere Informationen zur Anzeige der 100.000 Daten, die vom Back-End zurückgegeben werden, durch das Front-End finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Zusammenfassung der Zeilenumbruchprobleme bei Textbereichen in HTML
Inhaltsverzeichnis 1. Konzept Speicherverwaltungs...
Es gibt vier wichtige MySQL-Zeichenfolgenabfangfu...
Im vorherigen Artikel haben wir vorgestellt, wie ...
In diesem Artikelbeispiel wird der spezifische JS...
Inhaltsverzeichnis Variablenbereich Das Konzept d...
Das Vergessen des Passworts ist ein Ärgernis. Was...
Inhaltsverzeichnis 1. analysieren 1.1 Regeln für ...
Autor | Herausgeber Awen | Produziert von Tu Min ...
Der zuständige Verantwortliche für Baidu Input Met...
1. Stoppen Sie zuerst den MySQL-Dienst Öffnen Sie...
Wirkung: Ideen: Verwenden Sie das Eingabetypattri...
Inhaltsverzeichnis js tiefe Kopie Methode der Dat...
Vorwort Die Methode zum Konfigurieren von IP-Adre...
Inhaltsverzeichnis Canvas-bezogene Dokumente Effe...
Inhaltsverzeichnis Was sind unveränderliche Werte...