假如你的項目使用了React,你知道怎麼作性能優化嗎?
你知道爲何React讓你寫shouldComponentUpdate或者React.PureComponent嗎?
你知道爲何React讓你寫Immutable Data Structures嗎?
你知道爲何React讓你在渲染列表時,必定要給每一個子項加一個key嗎?
你知道爲何React讓你在條件渲染時,不寫if而寫&&操做符或三元操做符嗎?html
一切的答案都在Virtual DOM上!
只要你跟着我完成了這個手寫Virtual DOM的系列,上面的全部問題你都將獲得解答,今後進入react高手的陣營!前端
如今當咱們談virtual DOM (VDOM)的時候,一般會將React捆綁在一塊兒談。可實際上VDOM並非React創造的,React將這個概念拿過來之後融會貫通慢慢地成爲目前前端最煊赫一時的框架之一。react
首先咱們都知道什麼是DOM(Document Object Model),簡單說就是將一個HTML文檔抽象表達爲樹結構。VDOM則是將DOM再抽象一層生成的簡化版js對象,這個對象也擁有DOM上的一些屬性,好比id, class等,但它是徹底脫離於瀏覽器而存在的。算法
隨着前端技術的發展,如今的網頁應用變得愈來愈龐大,DOM樹也隨之變得複雜。當咱們要修改DOM的某個元素時,咱們須要先遍歷找個這個元素,而後才修改能修改。並且若是咱們大量地去修改DOM,每次DOM修改瀏覽器就得重繪(repaint)頁面,有的時候甚至還得重排(reflow)頁面,瀏覽器的重排重繪是很損耗性能的。json
React是怎麼用VDOM解決這個問題的呢?segmentfault
原理其實仍是很直觀的,但React究竟是怎麼用代碼實現的呢?其中最關鍵的一步是React是怎麼diff的?若是搞清楚了內部的實現原理,對於咱們使用React來寫出性能更高的代碼相當重要。因此今天我要手把手教你們怎麼從零開始實現VDOM。瀏覽器
咱們將採用跟React相似的方式性能優化
下面咱們開始正式進入寫代碼環節,建議你們打開編輯器跟着我一步一步的敲代碼。這樣手把手教你敲代碼的的博主你去哪裏找?還不抓住這個百年不遇的機會????babel
你們能夠新建一個目錄,而後新建1-4這四個文件框架