React非常快速是因為它從不直接操作DOM。 虛擬DOM是在DOM的基礎上建立了一個抽象層,對數據和狀態所做的任何改動,都會被自動且高效的同步到虛擬DOM,最後再批量同步到DOM中。 在React中,render執行的結果得到的並不是真正的DOM節點,而僅僅是JavaScript對象,稱之為虛擬D ...
React非常快速是因為它從不直接操作DOM。
虛擬DOM是在DOM的基礎上建立了一個抽象層,對數據和狀態所做的任何改動,都會被自動且高效的同步到虛擬DOM,最後再批量同步到DOM中。
在React中,render執行的結果得到的並不是真正的DOM節點,而僅僅是JavaScript對象,稱之為虛擬DOM。
虛擬DOM具有批處理和高效的Diff演算法,可以無需擔心性能問題而隨時“刷新”整個頁面,因為虛擬DOM可以確保只對界面上真正變化的部分進行實際的DOM操作。
在實際開發中無需關心虛擬DOM是如何運作的,但理解其運行機制不僅有助於更好的理解React組件的生命周期,而且對於進一步優化 React程式也有很大幫助。
1、傳統App與React App的對比:
傳統App:
React App:
2、虛擬DOM的原理:
React會在記憶體中維護一個虛擬DOM樹,對這個樹進行讀或寫,實際上是對虛擬DOM進行。當數據變化時,React會自動更新虛擬DOM,然後將新的虛擬DOM和舊的虛擬DOM進行對比,找到變更的部分,得出一個diff,然後將diff放到一個隊列里,最終批量更新這些diff到DOM中。
3、虛擬DOM的優點:
最終表現在DOM上的修改只是變更的部分,可以保證非常高效的渲染。
4、虛擬DOM的缺點:
首次渲染大量DOM時,由於多了一層虛擬DOM的計算,會比innerHTML插入慢。
5、虛擬DOM的理解誤區:
對虛擬DOM的理解往往停留在:通過JavaScript對象模擬原生DOM,加上DOM Diff 極大提升了DOM操作的性能。然而,虛擬DOM最大的意義不在於性能的提升(JavaScript對象比DOM對象性能高),而在於抽象了DOM的具體實現(對DOM進行了一層抽象),這在瀏覽器中使用 React時不是特別明顯,因為寫的DOM標簽跟原生的沒有區別,並且最終都被渲染成了DOM,在React Native中將會有很好的說明。