在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节点上,最终让浏览器可以渲染出更新的数据。
(未完待续...)