Über das Vue Virtual Dom-Problem

Über das Vue Virtual Dom-Problem

1. Was ist virtueller Dom?

Virtueller DOM ist im Wesentlichen ein allgemeines JS-Objekt, das zum Beschreiben der Schnittstellenstruktur der Ansicht verwendet wird.

Bildbeschreibung hier einfügen

In Vue hat jede Komponente eine Renderfunktion.

Bildbeschreibung hier einfügen

Wenn kein Render vorhanden ist, suchen Sie nach einer Vorlage. Wenn keine Vorlage vorhanden ist, suchen Sie nach el. Wenn el vorhanden ist, wird el.outHTML als Vorlage verwendet und dieser String dann in eine Renderfunktion kompiliert.
Wenn es eine Vorlage gibt, suche ich nicht weiter. Dasselbe gilt für das Rendern.

Bildbeschreibung hier einfügen

Jede Renderfunktion gibt einen virtuellen DOM-Baum zurück, was bedeutet, dass jede Komponente einem virtuellen DOM-Baum entspricht.
Mit anderen Worten besteht der Zweck des Renderns darin, einen virtuellen DOM zu erstellen, was genau diese Komponente anzeigt.
console.log('rendern'); ↓

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Off topic: console.dir() kann alle Eigenschaften und Methoden eines Objekts anzeigen.

Bildbeschreibung hier einfügen

Wenn keine Rückgabe erfolgt, ist auf der Seite kein echtes DOM vorhanden.
Rückgabe hinzufügen↓

Bildbeschreibung hier einfügen

Der Name der h-Funktion ist benutzerdefiniert, die Struktur der h-Funktion ist h(Label, {eigene Attribute}, [Unterelement]).
Das Unterelement wird weiterhin mit der h-Funktion erzeugt. Da es noch weitere Attribute gibt, erzeugen wir in [ ] ein weiteres Unterelement.

Bildbeschreibung hier einfügen

Die h-Funktion trifft eine Entscheidung. Wenn es sich nicht um ein Objekt handelt, handelt es sich um einen Textknoten. ↑ Es wird davon ausgegangen, dass die Konfiguration in der Mitte weggelassen wird

Bildbeschreibung hier einfügen

Auf der Seite gerendert.
Konsole.log(vnode);

Bildbeschreibung hier einfügen

h1 untergeordnetes Element↓

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Entsprechend realen Knoten durch .elm

h('h1','{ {title}}') ist definitiv nicht akzeptabel, es muss h('h1',this.title) sein.

2. Warum brauchen wir virtuellen Dom?

In Vue wird beim Rendern einer Ansicht die Renderfunktion aufgerufen. Dieses Rendering erfolgt nicht nur, wenn die Komponente erstellt wird, sondern auch, wenn die Daten aktualisiert werden, von denen die Ansicht abhängt. Wenn der reale DOM während des Renderns direkt verwendet wird, führt das Erstellen, Aktualisieren und Einfügen des realen DOM zu erheblichen Leistungsverlusten, was die Rendereffizienz erheblich verringert.
Daher verwendet Vue beim Rendern virtuelles DOM anstelle von realem DOM, hauptsächlich um das Problem der Rendering-Effizienz zu lösen.

Beim ersten Laden ist es kein Problem, den echten DOM zu generieren, da dies unvermeidlich und notwendig ist.
Die Renderfunktion wird nicht nur einmal, sondern bei jeder Änderung der Daten generiert.
Wenn jedoch createElement beim Rendern verwendet wird, wird jedes Mal ein neues DOM-Element generiert, was zu aufwändig ist.

3. Wie wird der virtuelle DOM in den realen DOM umgewandelt?

Wenn eine Komponenteninstanz zum ersten Mal gerendert wird, generiert sie zuerst einen virtuellen DOM-Baum, durchläuft die Knoten zuerst in der Tiefe, legt Attribute fest und erstellt dann basierend auf dem virtuellen DOM-Baum einen realen DOM. Sie hängt den realen DOM an der entsprechenden Position auf der Seite ein und ersetzt direkt div#app. An diesem Punkt entspricht jeder virtuelle DOM einem realen DOM.

Bildbeschreibung hier einfügen

Es ist nicht gleich, weil div#app direkt ersetzt wird

Wenn eine Komponente von Änderungen der Reaktionsdaten betroffen ist und erneut gerendert werden muss, ruft sie die Renderfunktion dennoch erneut auf, um einen neuen virtuellen DOM-Baum zu erstellen, den neuen Baum mit dem alten Baum zu vergleichen und durch den Vergleich die minimale Aktualisierungsmenge zu ermitteln und dann die erforderlichen realen DOM-Knoten zu aktualisieren, wodurch die minimale Änderung am realen DOM sichergestellt wird.

Bildbeschreibung hier einfügen

Überprüfen Sie mithilfe des Diff-Algorithmus, ob sich die beiden virtuellen DOMs unterscheiden, und ändern Sie dann den realen DOM der entsprechenden Knoten, um den gewünschten Effekt zu erzielen. Stellen Sie dabei sicher, dass die Änderungen minimal sind, und verbessern Sie die Effizienz.

4. Die Beziehung zwischen Vorlage und virtuellem DOM

Bildbeschreibung hier einfügen

Virtueller DOM, erstellt durch Scaffolding

Im Vue-Framework gibt es ein Kompilierungsmodul, das hauptsächlich für die Konvertierung der Vorlage in eine Renderfunktion verantwortlich ist. Nach dem Aufruf erhält die Renderfunktion den virtuellen DOM.

Der Kompilierungsprozess ist in zwei Schritte unterteilt (sowohl Babel als auch Webpack werden auf diese Weise erstellt):

Konvertieren Sie die Vorlagenzeichenfolge in einen AST (abstrakten Syntaxbaum, der unsere Inhalte in einer Baumstruktur beschreibt) und konvertieren Sie den AST in eine Renderfunktion

AST↓, lassen Sie mich erwähnen, dass AST mit einem Stapel aufgebaut ist

Bildbeschreibung hier einfügen

Wenn die herkömmliche Importmethode (src) verwendet wird, erfolgt die Kompilierung beim ersten Laden der Komponente. Dies wird als Laufzeitkompilierung bezeichnet. Auch hier ist Schritt 1 sehr zeitaufwändig.
Wenn es sich um die Standardkonfiguration von vue-cli handelt, erfolgt die Kompilierung während der Verpackung, was als Vorlagenvorkompilierung bezeichnet wird.
Die Kompilierung ist ein äußerst leistungsintensiver Vorgang. Durch Vorkompilierung kann die Laufzeitleistung effektiv verbessert werden. Da die Kompilierung während der Laufzeit nicht mehr erforderlich ist, schließt vue-cli außerdem das Kompilierungsmodul in vue beim Verpacken aus, um die Verpackungsgröße zu verringern.

Wenn die Vorlage oben nicht geschrieben ist

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Es wird ein Fehler gemeldet, aber Sie können es in vue.config.js konfigurieren

module.export={runtimeCompiler:true}

Nicht empfohlen, da dadurch kompilierter Inhalt hinzugefügt und der Inhalt größer wird. (Ich möchte esbuild und vite erwähnen, um das Verpacken zu beschleunigen? Ich habe sie nicht verwendet.)

Der Zweck der Vorlagen besteht lediglich darin, Entwicklern das Schreiben von Schnittstellencodes zu erleichtern.
Wenn Vue schließlich ausgeführt wird, wird die Renderfunktion benötigt, nicht die Vorlage. Daher sind die verschiedenen Syntaxen in der Vorlage im virtuellen DOM nicht vorhanden und werden alle zur Konfiguration des virtuellen DOM.

Bildbeschreibung hier einfügen

Äquivalent zu

Bildbeschreibung hier einfügen

Beispiel: Automatisches Erstellen eines Verzeichnisses

Jetzt müssen Sie eine Komponente erstellen, die basierend auf dem Inhalt in ihrem Slot automatisch ein Verzeichnis generieren kann.

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Dies ist das Ende dieses Artikels über Vue Virtual Dom-Probleme. Weitere verwandte Inhalte zu Vue Virtual Dom finden Sie in den vorherigen Artikeln von 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:
  • Dieser Artikel hilft Ihnen, den virtuellen Dom- und Diff-Algorithmus von Vue zu verstehen
  • Das Prinzip des virtuellen DOM von Vue
  • Vue Virtual DOM – Schnellstart
  • Detaillierte Erläuterung des virtuellen DOM in der Vue-Quellcodeanalyse
  • Zusammenfassung des Verständnisses des virtuellen DOM in Vue
  • Konvertierung von virtuellem Dom in reales Dom mit Vue
  • Zusammenfassung der virtuellen DOM-Wissenspunkte in Vue

<<:  Lösung zum Vergessen des Root-Passworts von MySQL5.7 unter Windows 8.1

>>:  Zusammenfassung praktischer Methoden für JS-Anfänger zur Verarbeitung von Arrays

Artikel empfehlen

Vue-Komponente kapselt Beispielcode zum Hochladen von Bildern und Videos

Laden Sie zuerst die Abhängigkeiten herunter: cnp...

MySQL-Platzhalter (erweiterte SQL-Filterung)

Inhaltsverzeichnis Lassen Sie uns zunächst kurz P...

Zusammenfassung häufig verwendeter Escape-Zeichen in HTML

Die in HTML häufig verwendeten Escape-Zeichen wer...

Zusammenfassung der gebräuchlichen Buchstaben in Unicode

Die meisten der ersten Computer konnten nur ASCII...

Detailliertes Tutorial zum Bereitstellen eines Django-Projekts unter CentOS

Grundlegende Umgebung Pagoden-Montageservice [Pyt...

Reiner CSS-Beispielcode für Meteorschauer-Hintergrund

GitHub-Adresse, Sie können es mit einem Stern mar...

So stellen Sie K8s in Docker bereit

K8s k8s ist ein Cluster. Es gibt mehrere Namespac...

Implementierung der Ausführung von SQL Server mit Docker

Jetzt ist .net Core plattformübergreifend und jed...

Floaten und Floaten löschen in der Übersichtsseite

1. Float: Der Hauptzweck besteht darin, den Effek...

20 JavaScript-Tipps zur Verbesserung der Entwicklungseffizienz

Inhaltsverzeichnis 1. Arrays deklarieren und init...