2015-06-09 12 views
7

Sanal DOM, gerçek DOM'ye yerleştirilmeden önce yerel olarak muhafaza edilen/önbelleğe alınan DOM'ın hafif bir kopyasıdır. İstediğimiz gibi değiştirebilir ve gerçek DOM ağacımıza kaydedebiliriz. Değişiklikleri ileri geri ve diğer kullanım durumlarını güncellemek için verimli farklı algoritmalar kullanır.
Bu, pahalı bir işlem olduğundan DOM ile doğrudan manipülasyondan kaçınmak için yapılır.
Ayrıca, DOM'a eklenecek sanal ağaç düğüm nesneleri oluşturan JavaScript'te kullanılabilen document.createDocumentFragment() yöntemine sahibiz.
Herhangi bir durum veya çift yönlü bağlanmada gözlemlenmesi gereken bir görünüm/bileşenim yoksa (örneğin, yalnızca şablona geçirilen seçenekleri kullanarak ve DOM'daki olayları işlemekle), Virtual DOM'ın gerçekten bir fark yaratacağını bilmek isterim. böyle senaryolarda?
Ya da tek yapması gereken, yalnızca oluşturma ve durum gözlemleme olmamasıdır, createDocumentFragment() kadar iyidir.Sanal DOM uygulaması, herhangi bir durum gözlenmezse, createDocumentFragment() öğesinden farklı mıdır?

+1

Yanıt, ** senaryounuza tamamen ** bağlıdır. Senaryoda, bir doc parçasını kullanmanın daha tipik DOM manipülasyonu ve modifikasyonundan daha iyi olacağını açıkladığına emin değilim. Aklında olan senaryonu test etmelisin. Tepki, bir Sanal DOM uygulamasından daha fazlasıdır ve bileşen soyutlamalarını daha fazlasını sağlar ... bunlar değer olabilir. – WiredPrairie

cevap

3

En basit cevap, NodeJS'nin document.createDocumentFragment, ne de document.createElement içermemesidir veya böyle bir şeydir.

VirtualDOM noktası DOM daha sonra enjekte edilecek sistemlere sadece büyük ölçekli düzenlemeler için izin vermek değil, aynı zamanda DOM sadece düz var olmayan bir ortamda herhangi düzenlemeler için izin vermek.

Bu, DocumentFragment s ve VirtualDOM uygulamasının pratik uygulaması arasındaki en büyük farktır. Belirli sanallaştırma sanallaştırması örneklerinde belirli yarar kütüphaneleri (React, demek), bu şeylerle başa çıkmayı, parçalara ve çocuklara elle yerleştirmeye kıyasla oldukça basit hale getirmektedir.

+0

Burada NodeJS ile ilgili hiçbir şey yoktur. Parça oluşturmak için javascript'inizde "document.createDocumentFragment" öğesini kullanabilir ve ardından DOM'a bütün ağacı ekleyebilirsiniz. Ayrıca, aynı soruyu düzenledim. – vivekj011

+0

Peki, bu durumda, hangi kütüphaneleri kullandığınıza ve ne işe yaradıklarına bakacaksınız. Çünkü her şeyi el ile yapıyorsanız, yardımcı fonksiyonlar olmadan, ikisi arasında geçiş yapmak size ekstra bir bellek kullanımı için pratikte hiçbir fayda sunmayacaktır ... VirtualDOM'in amacı ... . ... daha iyi ya da daha hızlı, ya da daha büyülü ya da daha kolay çalışmak için değil. VirtualDOM'i (ya teknik ya da gerçek sanal-dom kütüphanesi) kullanan kütüphaneler, tüm bu şeyleri ve daha fazlasını yapabilir. El ile yapmaya gerek yok ... – Norguard

+0

Ayrıca, HTML testlerinin oluşturulmasında ve ayrılmasında zaman harcamak istemediğiniz, özellikle DOM erişimine sahip olmak için, basit testler için entegrasyon testinde faydalar da vardır. Bir elementin/özniteliğin değerini kontrol etmek (örneğin, Mocha'yı kullanarak CI kurulumunu çalıştırmak gibi). Fakat yine de, eğer test bir fayda olarak sayılmazsa, o zaman hala Elms ve Tepkiler ve benzerleri için geçerlidir. – Norguard

İlgili konular