Hintergrund Wenn die Shuttle-Box große Datenmengen verarbeitet, kann es passieren, dass die Seite hängen bleibt, weil zu viele DOM-Knoten gerendert werden. Lösung Lazy Loading – Kopieren Sie zuerst die Originalkomponente der InfiniteScroll-Komponente aus Paketen/übertragen Sie sie (oder ändern Sie den Quellcode und verpacken Sie ihn neu, um die Verwendung einer privaten Bibliothek zu verwalten). v-infinite-scroll="Bild ab" :unendliches Scrollen-sofort="falsch" Hinzufügen zu <el-checkbox-gruppe v-show="!hasNoMatch && Datenlänge > 0" v-model="geprüft" :size="Größe" :Klasse="{ 'ist-filterbar': filterbar }" Klasse="el-transfer-panel__list" v-infinite-scroll="Bild ab" :unendliches Scrollen-sofort="falsch" > <el-Kontrollkästchen Klasse="el-transfer-panel__item" :label="Element[Schlüsseleigenschaft]" :deaktiviert="Element[deaktivierteProp]" :Schlüssel="Element[Schlüsseleigenschaft]" v-for="Element in gefilterten Daten"> <option-content :option="Artikel"></option-content> </el-checkbox> </el-checkbox-group> Definieren Sie pageSize in data:20, um die Anzahl der Daten pro Seite anzugeben. showData: [] wird nur zur Anzeige verwendet. Ersetzen Sie die tatsächlich zu bearbeitenden Daten im obigen Code durch filteredData. v-for="Element in ShowData"> Gleichzeitig erfolgt die entsprechende Verarbeitung in der Uhr Daten (Daten) { const geprüft = []; this.showData = data.slice(0, this.pageSize); const gefilterteDataKeys = this.filteredData.map( (Artikel) => Artikel[diese.keyProp] ); dies.überprüft.fürEach((Element) => { wenn (filteredDataKeys.indexOf(item) > -1) { geprüft.push(Artikel); } }); this.checkChangeByUser = falsch; dies.geprüft = geprüft; }, gefilterteDaten (gefilterteDaten) { this.showData = gefilterteDaten.slice(0, this.pageSize); } Die anfängliche Anzeigemenge beträgt 20 nach dem Zufallsprinzip. Fügen Sie abschließend die Methode hinzu, die beim Scrollen nach unten aufgerufen wird Seite nach unten () { const l = this.showData.length; const totalLength = this.filteredData.length l < Gesamtlänge && (diese.showData = diese.filteredData.slice(0, l + diese.pageSize > Gesamtlänge ? Gesamtlänge: l + diese.Seitengröße)); }, Beim Herunterscrollen erhöht sich die Länge der angezeigten Daten um 20 (die Zahl ist beliebig), bei Überschreitung wird die Maximallänge angezeigt. Dadurch wird grundsätzlich das Problem der Verlangsamung bei Vorgängen mit großen Datenmengen gelöst. Da die Präsentations- und Logikebenen getrennt sind, muss die Betriebslogik der Komponenten nicht geändert werden, wodurch die Unterschiede minimiert werden. Neue Fragen Das manuelle Scrollen bis zum Ende der Liste und die anschließende Suche führen weiterhin zu Verzögerungen. Fortschrittlich Beim Scrollen sind die Daten oben noch unsichtbar. Diese Daten werden nicht angezeigt und haben keinen Einfluss auf das Benutzererlebnis. Wir fügen der el-checkbox-group einen ref=scrollContainer hinzu, um die Bildlaufleiste zu bedienen. Definieren Sie die aktuelle Seitenzahl curIndex: 1 in Daten Und ändern Sie die pageDown-Methode Seite nach unten () { const totalLength = this.filteredData.length wenn((dieser.aktuellerIndex*diese.Seitengröße) < Gesamtlänge){ dies.curIndex++ const Ziellänge = this.curIndex * this.Seitengröße const endPoint = Ziellänge > Gesamtlänge ? Gesamtlänge : Ziellänge const startPoint = endPoint - diese.Seitengröße > 0 ? endPoint - diese.Seitengröße : 0 dies.showData = dies.filteredData.slice(Startpunkt, Endpunkt); this.$refs.scrollContainer.$el.scrollTop = "1px" //Leiste nach oben scrollen und Verbindung zur nächsten Seite herstellen. 0 kann Begrenzungsprobleme auslösen.} } Dazu müssen wir auch eine Methode zum Umblättern der Seite hinzufügen. Der Befehl InfiniteScroll ermöglicht nur das Scrollen nach unten. Wir können diesen Befehl erweitern und den Listener mount(){ für das Scrollen nach oben hinzufügen. dies.$refs.scrollContainer.$el.addEventListener('scroll', diese.pageUp) }, vorZerstören(){ dies.$refs.scrollContainer.$el.removeEventListener('scroll', diese.pageUp) }, Registrieren der PageUp-Methode Seite nach oben (e) { wenn(e.target.scrollTop === 0 && this.curIndex> 1){ this.curIndex -- const endPoint = this.curIndex * this.pageSize const startPoint = (this.curIndex-1)* diese.Seitengröße dies.showData = dies.filteredData.slice(Startpunkt, Endpunkt); const el = this.$refs.scrollContainer.$el el.scrollTop = el.scrollHeight – el.clientHeight – 1 // Nach unten scrollen und mit der vorherigen Seite verbinden. -1 verhindert Randprobleme. } }, Bei der Durchführung von Datenoperationen ändert sich der Seiteninhalt und die Bildlaufleiste ändert sich entsprechend. Um unvorhersehbares Umblättern zu verhindern, werden die Bildlaufleiste und die aktuelle Seitenzahl bei Datenänderungen zurückgesetzt. initScroll(){ this.curIndex = 1 dies.$refs.scrollContainer.$el.scrollTop = 0 }, Führen Sie gleichzeitig initScroll zum entsprechenden Zeitpunkt in der Uhr aus Daten(){ ... dies.initScroll() ... }, gefilterteDaten (gefilterteDaten) { ... dies.initScroll() } An diesem Punkt wurde die Leistung des Shuttle-Frames für große Datenmengen erheblich verbessert. Dies ist das Ende dieses Artikels über die Implementierung der Leistungsoptimierung von Element-Shuttleboxen. Weitere relevante Inhalte zur Leistungsoptimierung von Element-Shuttleboxen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Beispielcode für Box-Shadow und Drop-Shadow zum Erreichen einer unregelmäßigen Projektion
>>: So zeigen Sie MySQL-Links an und löschen abnormale Links
Inhaltsverzeichnis Tutorial-Reihe 1. Installieren...
1. Exportieren Sie die Datenbank mit dem Befehl m...
Ich möchte die Installations- und Konfigurationsm...
In früheren Blogbeiträgen habe ich mich auf einige...
1. Langsames Abfrageprotokoll 1.1 MySQL-Protokoll...
1. Gleiche IP-Adresse, unterschiedliche Portnumme...
Vorwort Wenn Sie jemand fragt: „Was sind die Merk...
In diesem Artikelbeispiel wird der spezifische Co...
<Text> <div id="Wurzel"> &l...
Hinweis: Dieser Artikel wurde von jemand anderem ü...
Wenn Sie ein Vue-Projekt entwickeln, müssen Sie h...
Um die Unterstreichung eines Hyperlinks zu entfern...
Warum lautet der Titel des Artikels „Imitierte Lu...
Cursor Die von der Auswahlabfrage zurückgegebenen...
In diesem Artikel wird das Shell-Skript von mysql...