Virtual DOM ist eine leichte Kopie von DOM, die lokal verwaltet/zwischengespeichert wird, bevor sie in das eigentliche DOM eingefügt wird. Wir können es so ändern, wie wir es wollen und dann in unserem echten DOM-Baum speichern. Es verwendet effiziente diff-Algorithmen, um Änderungen hin und her und andere Anwendungsfälle zu aktualisieren.
Dies alles ist getan, um direkte Manipulation mit DOM zu vermeiden, da es eine teure Operation ist.
Wir haben document.createDocumentFragment() Methode, die in JavaScript verwendet werden kann, die auch imaginäre Baumknotenobjekte zum Einfügen in DOM erstellt.
Ich würde gerne wissen, wenn ich nicht View/Komponente, die auf jeden Zustand oder bidirektionale Bindung beachten müssen (z. B. nur Vorlage durch übergebene Optionen und Ereignisse auf DOM behandeln), wird Virtual DOM wirklich einen Unterschied machen in solchen Szenarien?
Oder es ist so gut wie createDocumentFragment(), wenn alles, was es zu tun hat nur Rendering und keine Beobachtung auf Zustand ist.Wie unterscheidet sich die virtuelle DOM-Implementierung von createDocumentFragment(), wenn kein Status beobachtet wird?
Antwort
Die einfachste Antwort ist, dass NodeJS weder document.createDocumentFragment
, noch document.createElement
oder dergleichen hat (/ wird). Der Punkt von VirtualDOM besteht darin, nicht nur groß angelegte Änderungen an Systemen zuzulassen, auf denen später DOM injiziert wird, sondern auch beliebige Bearbeitungen in einer Umgebung, in der das DOM gerade nicht existiert.
Dies ist der größte Unterschied zwischen der praktischen Anwendung von DocumentFragment
s und VirtualDOM.
Zusätzliche Vorteile in Bezug auf bestimmte Instanzen der DOM-Virtualisierung wäre, dass bestimmte Ansicht Bibliotheken (Reagieren, sagen) machen den Umgang mit diesen Dingen ziemlich einfach, im Vergleich zu manuellen Einfügen in Fragmente und ihre Kinder.
Hier ist nichts mit NodeJS verbunden. Sie können "document.createDocumentFragment" in Ihrem JavaScript verwenden, um Fragmente zu erstellen und dann den gesamten Baum zum DOM hinzuzufügen. Außerdem habe ich die Frage für dasselbe bearbeitet. – vivekj011
Nun, in diesem Fall kommt es einfach darauf an, welche Bibliotheken Sie benutzen und was * sie * benutzen. Denn wenn Sie alles von Hand erledigen, ohne auch nur die Hilfsfunktionen zu verwenden, bietet Ihnen der Wechsel zwischen den beiden praktisch keinen Vorteil mehr für zusätzlichen Speicherverbrauch ... Der Punkt von VirtualDOM ist, ... das DOM zu vereinheitlichen . ... nicht, um es besser oder schneller zu machen, oder magischer oder einfacher zu arbeiten. Bibliotheken, die VirtualDOM (entweder die Technik oder die tatsächliche Virtual-Dom-Bibliothek) verwenden, können all diese Dinge und mehr tun. Wechseln Sie nicht von Hand ... – Norguard
Es gibt auch Vorteile im Integrationstest, für einfache Tests, bei denen Sie nicht die Zeit für den Aufbau und das Abreißen von HTML-Seiten aufwenden müssen, insbesondere für den DOM-Zugriff. Überprüfen Sie den Wert eines Elements/Attributs (z. B. das Ausführen eines CI-Setups mit Mocha). Aber auch wenn das Testen nicht als Vorteil zählt, liegt es immer noch an den Elms und den Reacts und dergleichen. – Norguard
- 1. componentWillReceiveProps Status unterscheidet sich von Render-Status nach Redux-Status-Update
- 2. Warum unterscheidet sich {} + [] von ({} + [])?
- 3. Wie wird einmalig gedruckt (kein Mehrfaches), wenn sich der Status ändert?
- 4. C++ - Vektorelement unterscheidet sich, wenn auf verschiedene Zeiten zugegriffen wird
- 5. Wie unterscheidet sich Hashtable
- 6. Wie unterscheidet sich die Dichte von ggplot2 von der Dichtefunktion?
- 7. Wie unterscheidet sich mpi_file_write von mpi_file_write_all?
- 8. Wie unterscheidet sich ArrayListMultimap von LinkedListMultimap?
- 9. Wie unterscheidet sich Gitlab von Github?
- 10. GCC: Wie unterscheidet sich März von Mtune?
- 11. Wie unterscheidet sich das Armspeichermodell von ia64?
- 12. Wie unterscheidet sich << von +?
- 13. Wie unterscheidet sich MegaStore von BigTable?
- 14. Wie unterscheidet sich Gurke von JUnit?
- 15. React-Status ändert sich, wenn verschachteltes Objekt geschoben wird
- 16. Wie unterscheidet sich die Zeitzone EST von EST5EDT?
- 17. Wie unterscheidet sich die Belastung in Ruby von require?
- 18. Wie unterscheidet sich die MSMQ-Bindung in WCF von WsHttp?
- 19. Wie unterscheidet sich die x64-Architektur von x86
- 20. Identischer Code unterscheidet sich von verschiedenen Quellen
- 21. Farbe von NavBar unterscheidet sich von Hintergrundfarbe
- 22. Wenn der kompilierte Code unterscheidet sich von der Shell ausgewertet?
- 23. Wie wird die Änderung der Komponentenbindung mit der Winkelkomponente beobachtet?
- 24. Warum unterscheidet sich die Skalierung von Steuerungen zwischen PCs?
- 25. Wie ändert sich die JTree-Ansicht dynamisch, wenn sich der Status eines Knotenobjekts ändert?
- 26. Gradle: Wie unterscheidet sich die Reihenfolge der Abhängigkeiten?
- 27. ProgressDialog Nachrichtentext unterscheidet sich von AlertDialog
- 28. Perl Mantisse unterscheidet sich von anderen Doppel
- 29. Unterscheidet sich die Netzwerkbandbreite auf Azure-Websites von virtuellen Maschinen?
- 30. Codierung, die sich von ASCII unterscheidet, auch für Buchstaben
Die Antwort hängt ** ganz ** von Ihrem Szenario ab. Ich bin nicht sicher, dass in dem Szenario, das Sie beschreiben, die Verwendung eines Dokumentfragments besser wäre als nur typische DOM-Manipulation und Modifikation. Sie müssen das Szenario, das Sie im Sinn haben, testen. Reagieren ist mehr als nur eine virtuelle DOM-Implementierung und bietet Komponenten-Abstraktionen und mehr ... diese können wertvoll sein. – WiredPrairie