莲开十月人思量 2019-06-21
在Web开发中,要将更新的数据实时反映到UI上,就不可避免地需要对DOM进行操作,而复杂频繁的DOM操作通常是产生性能瓶颈的原因之一。为此,React引入了Virtual DOM
机制。Virtual DOM
实际上是在浏览器端用JavaScript
实现的一套DOM API
,它包括:
Virtual DOM
模型Virtual DOM
展示为原生DOM的Patch
方法基于React进行开发时,所有的DOM树都是在Virtual DOM
的基础上构造的。React在Virtual DOM
上实现了DOM diff
算法,当数据更新时,会通过diff算法寻找到需要变更的DOM节点,并只对变化的部分进行实际的浏览器的DOM更新,而不是重新渲染整个DOM树。
Virtual DOM
模型ReactElement
通过JSX创建的虚拟元素最终会被编译成调用React的createElement
方法
当使用React创建组件时,首先会调用instantiateReactComponent
,这是初始化组件的入口函数,它通过判断node类型来区分不同组件的入口
ReactDOMTextComponent
ReactDOMComponent
ReactCompositeComponent
React的主要思想是通过构建可复用组件来构建用户界面。所谓组件,就是有限状态机,通过状态渲染对应页面,每个组件组件都有自己的生命周期,它规定了组件和方法需要在哪个阶段改变和执行。
diff算法会帮助我们计算出Virtual DOM
中真正变化的部分,并只针对该部分进行原生DOM操作,而非重新渲染整个页面,从而保证了每次操作更新后页面的高效渲染。
React结合DOM树的特点,对传统diff算法进行了改进,将其转换为O(n)复杂度的问题
将diff算法计算出来的DOM差异队列更新到真实的DOM节点上,最终让浏览器能够渲染出更新的数据。
(未完待续...)