React的虛擬DOM

來源:互聯網
上載者:User

標籤:

ReactJs的一大特點就是引進了虛擬dom(Virtual DOM)的概念。為什麼我們需要Virtual DOM,Virtual DOM給我們帶來了什麼優勢。

首先我們要瞭解一下瀏覽器的工作流程。

當我們從一個服務拿到請求的html時,瀏覽器會怎麼辦?

(1)建立DOM樹

一旦瀏覽器收到html檔案後,渲染引擎(render engine)就開始解析它,並根據HTML元素(elements)一一對應地產生DOM 節點(nodes),組成一棵DOM樹。

(2)建立渲染樹

同時,瀏覽器也會解析來自外部CSS檔案和元素上的inline樣式。通常瀏覽器會為這些樣式資訊,連同包含樣式資訊的DOM樹上的節點,再建立另外一個樹,一般被稱作渲染樹(render tree)。

(3)Layout布局

又被簡稱為Reflow。構造了渲染樹以後,瀏覽器引擎開始著手布局(layout)。布局時,渲染樹上的每個節點根據其在螢幕上應該出現的精確位置,分配一組螢幕座標值。

(4)繪製 Painting

接著,瀏覽器將會通過遍曆渲染樹,調用每個節點的paint方法來繪製這些render對象。paint方法根據瀏覽器平台,使用不同的UI後端API(agnostic UI backend API)。 通過繪製,最終將在螢幕上展示內容。

 

我們知道,當頁面的結構布局發生變化時,瀏覽器就要去重新渲染,這就是迴流。每次瀏覽器的重新渲染都會都會花時間,如果頻繁的操作dom結構,可能會引起不好的使用者體驗。

React的虛擬dom,對此的一個最佳化,簡單點來說就是,將多次的DOM操作,合成一次操作,減少了reflow的次數。

 

DOM 操作 真正的問題在於每次操作都會觸發布局的改變、DOM樹的修改和渲染。所以,當你一個接一個地去修改30個節點的時候,就會引起30次(潛在的)布局重算,30次(潛在的)重繪,等等。

Virtual DOM 實際上沒有使用什麼全新的技術,僅僅是把 “ 雙緩衝(double buffering)” 技術應用到了DOM上面。 這樣一來,當你在這個單獨的虛擬DOM樹上也一個接一個地修改30個節點的時候,它不會每次都去觸發重繪,所以修改節點的開銷就變小了。 之後,一旦你要把這些改動傳遞給真實DOM,之前所有的改動就會整合成一次DOM操作。這一次DOM操作引起的布局計算和重繪可能會更大,但是相比而言,整合起來的改動只做一次,減少了(多次)計算。

不過,實際上不藉助Virtual DOM也可以做到這一點。你可以自己手動地整合所有的DOM操作到一個DOM 片段(DOM fragment) 裡,然後再傳遞給DOM樹。

 

 

——————————————————

原文連結:http://mp.weixin.qq.com/s?__biz=MzI0ODA2ODU2NQ==&mid=2651130413&idx=1&sn=56a1cc3ac225a09982fc0c4a508222c7&chksm=f257ca97c5204381b559763f4af839ab72eda009c47b0f0a4d47492852b87211c601dee8987a&scene=23&srcid=0910yHpjoNTORi3itDTKNRfu#rd

React的虛擬DOM

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.