React
本身只是一个DOM
的抽象层,使⽤组件构建虚拟DOM
首先来看,什么是Virtual DOM
简单来说,Virtual DOM
本身只是一个js
对象
进一步说,Virtual DOM
是一种编程概念,我们使用js
对象描述真实的DOM
节点。当这个真实的DOM
节点需要变化时,我们先去更改js
对象,然后通过这个js
对象来同步更改DOM
节点。这个过程我们称之为协调。协调的核心:diff
Fiber
是React16
中新增的协调引擎。它的目的是使Virtual DOM
可以进行增量式渲染
为什么使用Virtual DOM
简单来说,使用Virtual DOM
性能高
原因是DOM
操作很慢,轻微的操作都可能导致页面重排,非常消耗性能。相对于DOM
对象,js
对象处理起来更快,而且更简单。通过diff
算法比对新旧vdom
之间的差异,可以批量的、最小化的执行dom
操作,从而提高性能。
其实真实DOM
也是一个对象,但是非常大。如下,将div
标签对应的真实DOM odiv
的key
值打出来
<body>
<div></div>
</body>
<script>
let odiv = document.getElementsByTagName('div')[0]
let str = ''
for (const key in odiv) {
str += ' ' + key
}
console.log(str)
</script>
可以看见,原生dom
节点非常庞大。如果直接diff
这个对象,那成本太高了
那在React中,如何使用了Virtual DOM
React
中可以使用JSX
语法描述视图,通过babel-loader
转译后它们变成React.createElement(...)
形式,该函数将生成vdom
来描述真实dom
。将来如果发生状态变化,vdom
将作出相应变化,再通过diff
算法比对新老vdom
区别,从而做出最终dom
操作
以上是关于React Virtual DOM
的简单理解
网友评论