反應和 Vue.js使用虛擬 DOM 來優化性能。那么影子多姆是什么呢?
如果你使用 React 或 Vue,你可能熟悉虛擬 DOM(文檔對象模型)。這不應與影子 DOM 混淆。
在查看虛擬 DOM 和影子 DOM 之前,您應該清楚地了解文檔對象模型。
為此,通俗地說,我們會說
DOM 表示您網站的結構。
如果您想了解有關 DOM 的創建位置以及 HTML、DOM 和 JavaScript 之間的關系的更多信息,請考慮閱讀什么是 DOM?
現在我們對 DOM 有了一些了解,讓我們看看什么是虛擬 DOM。
什么是虛擬 DOM?
簡而言之,虛擬 DOM (VDOM) 是一個編程概念,其中 UI 的理想或“虛擬”表示形式保存在內存中,并通過庫(如 reactDOM by reactjs.org)與“真實”DOM 同步。
換句話說,React 構建了一個邏輯樹,用于表示引擎蓋下的實際 DOM 結構。
為什么我們需要虛擬 DOM?
虛擬DOM是解決現代網絡中常見問題的一種方法。
雖然應用程序變得越來越大,但框架和庫往往會過于頻繁地操作和更新 DOM。這在很多方面可能很昂貴。
導航 DOM 會變慢,需要更多的處理能力,最終影響應用程序的性能。
例如,它會使頁面變慢。
有幾種方法可以解決此問題:
React 使用虛擬 DOM,并通過對賬過程將其同步到真實的 DOM。
Angular使用更改檢測機制“來查看您的應用程序狀態是否已更改以及是否需要更新任何DOM”。
維尤還使用虛擬 DOM。通過使用一些差異算法,Vue 避免了在新更改后重新渲染整個 DOM。
簡而言之,讓我們記住,虛擬 DOM 是真實 DOM 的副本。
通過告訴 React 我們想要實現的最終 DOM 狀態(UI 的外觀),React 確保 DOM 與該狀態匹配。
什么是暗影多姆?
Shadow DOM是一種專為封裝而設計的瀏覽器技術,例如,保持標記結構,樣式和行為的隱藏,并與頁面上的其他代碼分開,以便不同的部分不會發生沖突,MDN。
封裝會屏蔽某些代碼,使其不會與頁面上的其他代碼沖突。
換句話說,由于影子DOM,我們可以將其他元素附加到真正的DOM,知道新元素不會與真正的DOM本身沖突。
MDN提出的一個例子是標簽。雖然您只能在 DOM 中看到 標記,但此元素在其影子 DOM 中包含一系列按鈕和其他控件。
虛擬 DOM 和影子 DOM 之間的差異
關于虛擬 DOM 和影子 DOM 之間的區別,我們能說些什么呢?這有點像 Java 和 Java 腳本之間的差異!
盡管提到了 DOM,但虛擬 DOM 和影子 DOM 是不同的技術。
虛擬 DOM 被 React 和 Vue 等庫用來解決在保持最佳性能的同時更改 DOM 的問題。
虛擬 DOM 是整個真實 DOM 的副本,并在瀏覽器 API 之上實現。
影子 DOM 是 Web 組件和瀏覽器 API 中固有的。因此,它也可以在使用 React 和 Vue 等庫或 Angular 等框架時使用。
影子 DOM 是一塊 DOM,在其自己的 Web 組件中被“屏蔽”。
相反,如果您要使用普通 JavaScript 創建應用程序,則不會使用虛擬 DOM。