Virtual DOM è una copia leggera del DOM, mantenuta/memorizzata nella cache locale prima di inserirla nel DOM reale. Possiamo cambiarlo come vogliamo e quindi salvare nel nostro vero albero DOM. Utilizza algoritmi diff efficienti per aggiornare i cambiamenti avanti e indietro e altri casi d'uso.
Tutto ciò per evitare una manipolazione diretta con DOM in quanto è un'operazione costosa.
Abbiamo il metodo document.createDocumentFragment() che può essere utilizzato in JavaScript, che crea anche oggetti nodo di oggetti immaginari da inserire nel DOM.
Mi piacerebbe sapere, se non ho la vista/componente che è necessario osservare su qualsiasi stato o associazione bidirezionale (ad esempio, solo il modello di rendering con le opzioni passate e gestire gli eventi su DOM), Virtual DOM farà davvero la differenza in questi scenari?
Oppure è buono come createDocumentFragment() se tutto ciò che deve fare è solo il rendering e nessuna osservazione sullo stato.In che modo l'implementazione del DOM virtuale è diversa da createDocumentFragment() se non viene osservato nessuno stato?
risposta
La risposta più semplice è che NodeJS non ha (o avrà) document.createDocumentFragment
, né document.createElement
o simili.
Il punto di VirtualDOM è quello di consentire non solo modifiche su larga scala a sistemi in cui viene eseguita l'iniezione DOM, ma anche per consentire di eventuali modifiche in un ambiente in cui il DOM semplicemente non esiste.
Questa è la più grande differenza tra l'applicazione pratica di DocumentFragment
se VirtualDOM.
I benefici aggiunti in termini di istanze specifiche della virtualizzazione DOM sarebbero che determinate librerie di viste (React, ad esempio) rendono abbastanza semplice la gestione di queste cose rispetto all'inserimento manuale in frammenti e ai relativi figli.
Non c'è nulla di correlato a NodeJS qui. Puoi usare "document.createDocumentFragment" nel tuo javascript per creare frammenti e quindi aggiungere l'intero albero al DOM. Inoltre, ho modificato la domanda per lo stesso. – vivekj011
Beh, in questo caso si tratta semplicemente di quali librerie si utilizzano e di cosa * loro * usano. Perché se lo fai tutto a mano, senza le funzioni di aiuto, il passaggio tra i due non ti offrirà praticamente alcun vantaggio, per l'utilizzo di memoria extra ... Il punto di VirtualDOM è ... Vritualizzare il DOM . ... non per renderlo migliore o più veloce, o più magico o ancora più facile da lavorare. Le librerie che utilizzano VirtualDOM (sia la tecnica che l'effettiva libreria virtual-dom) potrebbero fare tutte queste cose e molto altro. Non passare a farlo a mano ... – Norguard
Ci sono anche vantaggi nel test di integrazione, per test semplici, in cui non si vuole perdere tempo a costruire e abbattere pagine HTML, in particolare per avere accesso DOM, per controllare il valore di un elemento/attributo (come l'esecuzione di una configurazione di CI usando Mocha). Ma di nuovo, se anche il test non conta come un vantaggio, allora è ancora giù per gli Elms e per i Reacts e simili. – Norguard
- 1. In che modo l'implementazione di LinkedHashMap è diversa da HashMap?
- 2. In che modo una chiusura è diversa da una richiamata?
- 3. Una funzione membro virtuale viene utilizzata se non è pura?
- 4. In che modo la profilatura è diversa dalla registrazione?
- 5. Perché jQuery.css non applica una proprietà se non è supportata e in che modo viene verificata?
- 6. Perché/in che modo SOAP è in stato?
- 7. In che modo Mesa è diversa dai driver OpenGL?
- 8. Valore chiave Osservare removeObserver quando l'oggetto osservato è deallocato
- 9. Come posso forzare un errore del compilatore se viene chiamato un metodo virtuale non sovrascritto?
- 10. In che modo la nozione di statica di Java è diversa da quella di C#?
- 11. Rileva se viene premuto un tasto qualsiasi in C# (non A, B, ma nessuno)
- 12. GWT: in che modo il client può rilevare che il javascript non è sincronizzato se il server viene aggiornato
- 13. Il DOM dell'ombra è veloce come il DOM virtuale in React.js?
- 14. AppEngine UrlFetch validate_certificate = non False/Nessuno viene rispettato
- 15. Python: Assegna valore se non esiste nessuno
- 16. è possibile sapere se il DOM è stato modificato e quale parte?
- 17. Attività frammento: l'app è morta, nessuno stato salvato
- 18. Script del contenuto dell'estensione di Chrome che non accede al DOM della pagina in cui è stato iniettato
- 19. Perché document.elementFromPoint è interessato da eventi puntatore: nessuno?
- 20. L'attributo virtuale non è stato spostato nell'hash del modello all'interno dei parametri
- 21. Setup nginx di non arrestarsi in modo anomalo se non è stato trovato l'host in upstream
- 22. In che modo un thread creato da un'app può essere considerato un'app diversa da ContentProvider dell'app?
- 23. A WebGroup/host virtuale per gestire/non è stato definito
- 24. $ .event.trigger non viene attivato in oggetto non DOM
- 25. Il metodo virtuale non viene chiamato
- 26. Controllare se un file che è stato aperto con fopen è stato chiuso
- 27. Android: Eccezione memoria esaurita/In che modo decodeResource viene aggiunto al budget della macchina virtuale?
- 28. Ember.js: Controlla se l'elemento di visualizzazione è inserito in DOM
- 29. elementi molti-a-molti in un modello: controlla se nessuno è vuoto o nessuno
- 30. Come determinare il doctype se nessuno è stato impostato nel documento?
La risposta dipende ** interamente ** dal proprio scenario. Non sono sicuro che nello scenario si descriva che l'utilizzo di un frammento di un documento sarebbe migliore della semplice manipolazione e modifica DOM tipica. Devi testare lo scenario che hai in mente. React è molto più di un'implementazione di Virtual DOM e fornisce astrazioni di componenti più ... quelle possono essere di valore. – WiredPrairie