1.5 React虚拟DOM |
|
React框架的核心优势之一,就是支持创建虚拟DOM来提高页面性能。那么,什么是虚拟DOM呢?其实,虚拟DOM这个概念很早就被提出来了,是相对于实际DOM而言的。
设计人员在设计传统HTML网页的UI时,都会在页面中定义若干的DOM元素,这些DOM元素是所谓的实际DOM。通常,页面中的实际DOM负责承载着外观表现和数据变化,任何外观形式的改变或数据信息的更新都要反馈到UI上,都是需要通过操作实际DOM来实现的。
于是,问题也就自然出现了。对于复杂的页面UI而言,往往会定义大量的实际DOM。频繁地操作大量实际DOM,往往会带来访问性能的严重下降,用户体验也会随之变差,这些都是设计人员所不希望看到的。因此,React框架专门针对这个现象引入了虚拟DOM机制,以避免频繁的DOM操作带来的性能下降问题。
React DOM类似于一种将相关的实际DOM组合在一起的集合,是有区别于传统概念上的DOM元素的,如果将其理解为DOM组件应该更为贴切。因此,React框架将React DOM称为虚拟DOM。
为了更好地让读者理解虚拟DOM的概念,我们分别以两种DOM方式来实现效果相同的页面,通过实际代码的区别来进行对比。有趣的是,在HTML DOM和React DOM语法中均定义了一个createElement()方法用来创建元素。当然,HTML DOM语法中的createElement()方法创建的是一个实际DOM,而React DOM中的createElement()方法创建的却是一个虚拟DOM。
下面先看一个通过HTML DOM语法中的createElement()方法创建实际DOM的代码实例,具体如下:
【代码1-3】(详见源代码目录ch01-js-createElement.html文件)
关于【代码1-3】的说明:
下面使用Firefox浏览器运行测试该HTML网页,具体效果如图1.8所示。
图1.8 JavaScript创建实际DOM
下面再看一个使用React DOM语法中的createElement()方法,以虚拟DOM方式实现的代码实例,具体如下:
【代码1-4】(详见源代码目录ch01-react-createElement.html文件)
关于【代码1-4】的说明:
下面使用Firefox浏览器运行测试该HTML网页,具体效果如图1.9所示。
图1.9 React创建虚拟DOM
如图1.8和图1.9中的箭头和标识所示,通过HTML DOM创建的实际DOM与通过React DOM渲染出来的虚拟DOM,二者的显示效果是完全相同的。