在Web開發中,要將更新的數據實時反映到UI上,就不可避免地須要對DOM進行操做,而複雜頻繁的DOM操做一般是產生性能瓶頸的緣由之一。爲此,React引入了Virtual DOM
機制。Virtual DOM
其實是在瀏覽器端用JavaScript
實現的一套DOM API
,它包括:node
Virtual DOM
模型Virtual DOM
展現爲原生DOM的Patch
方法基於React進行開發時,全部的DOM樹都是在Virtual DOM
的基礎上構造的。React在Virtual DOM
上實現了DOM diff
算法,當數據更新時,會經過diff算法尋找到須要變動的DOM節點,並只對變化的部分進行實際的瀏覽器的DOM更新,而不是從新渲染整個DOM樹。react
Virtual DOM
模型ReactElement算法
經過JSX建立的虛擬元素最終會被編譯成調用React的createElement
方法瀏覽器
當使用React建立組件時,首先會調用instantiateReactComponent
,這是初始化組件的入口函數,它經過判斷node類型來區分不一樣組件的入口dom
ReactDOMTextComponent函數
ReactDOMComponent性能
ReactCompositeComponentcode
React的主要思想是經過構建可複用組件來構建用戶界面。所謂組件,就是有限狀態機,經過狀態渲染對應頁面,每一個組件組件都有本身的生命週期,它規定了組件和方法須要在哪一個階段改變和執行。component
diff算法會幫助咱們計算出Virtual DOM
中真正變化的部分,並只針對該部分進行原生DOM操做,而非從新渲染整個頁面,從而保證了每次操做更新後頁面的高效渲染。遞歸
React結合DOM樹的特色,對傳統diff算法進行了改進,將其轉換爲O(n)複雜度的問題
將diff算法計算出來的DOM差別隊列更新到真實的DOM節點上,最終讓瀏覽器可以渲染出更新的數據。
(未完待續...)