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 1. Einfach zu bedienen 2. Verw...
*Seite erstellen: zwei Eingabefelder und ein Butt...
Überblick Prometheus ist ein Open-Source-Dienstüb...
Einige Monate nachdem ich 2005 in die Branche eing...
Inhaltsverzeichnis Änderungen an der Rendering-AP...
AngularJS-Loop-Objekteigenschaften zum Erreichen ...
Docker installieren Aktualisieren Sie das Yum-Pak...
Vorwort Kürzlich stieß ich bei der Arbeit auf ein...
Wenn die Rahmenlänge früher kleiner als der Conta...
Inhaltsverzeichnis 1 Aktuellen Datenbankinhalt ei...
Socat muss vor der Installation von rabbitmq inst...
Sogenanntes Talent (linke und rechte Gehirnhälfte...
Sie können Docker installieren und einfache Vorgä...
1. Szenariodarstellung Das Tomcat-Protokoll melde...
Inhaltsverzeichnis Vorwort Browser kompilierte Ve...