Implementierung der Leistungsoptimierung des Element-Shuttle-Frames

Implementierung der Leistungsoptimierung des Element-Shuttle-Frames

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.
Optimieren Sie, ohne die ursprüngliche Logik der Komponente so weit wie möglich zu verändern.

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).
Wille

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.
Es müssen also nur 20 Daten auf der aktuellen Seite angezeigt werden.

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:
  • Vue führt den Shuttle-Frame für Element-Transfer auf Anfrage ein
  • Lösung für das Problem, dass es beim Klicken auf „Alles auswählen“ in der Shuttle-Box von Element bei großen Datenmengen hängen bleibt

<<:  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

Artikel empfehlen

Verwendung von TypeScript-Generics

Inhaltsverzeichnis 1. Einfach zu bedienen 2. Verw...

Detaillierte Erklärung dynamisch generierter Tabellen mit Javascript

*Seite erstellen: zwei Eingabefelder und ein Butt...

Diskussion über Web-Nachahmung und Plagiat

Einige Monate nachdem ich 2005 in die Branche eing...

So ändern Sie die IP-Einschränkungsbedingungen des MySQL-Kontos

Vorwort Kürzlich stieß ich bei der Arbeit auf ein...

Implementierung der CSS-Rahmenlängensteuerungsfunktion

Wenn die Rahmenlänge früher kleiner als der Conta...

So installieren Sie den RabbitMQ-Server mit Yum auf CentOS

Socat muss vor der Installation von rabbitmq inst...

Eine gute Möglichkeit, Ihre Designfähigkeiten zu verbessern

Sogenanntes Talent (linke und rechte Gehirnhälfte...

Docker-Datenverwaltung und Netzwerkkommunikationsnutzung

Sie können Docker installieren und einfache Vorgä...

Detaillierte Erklärung des Vue3-Sandbox-Mechanismus

Inhaltsverzeichnis Vorwort Browser kompilierte Ve...