Virtual DOM 是一个模拟 DOM 树的 JavaScript 对象。 React 使用 Virtual DOM 来渲染 UI,当组件状态 state 有更改的时候,React 会自动调用组件的 render 方法重新渲染整个组件的 UI。

React 主要的目标是提供一套不同的, 高效的方案来更新 DOM.不是通过直接把 DOM 变成可变的数据, 而是通过构建 “Virtual DOM”, 虚拟的 DOM, 随后 React 处理真实的 DOM 上的更新来进行模拟相应的更新。

引入额外的一个层怎么就更快了呢?

那不是意味着浏览器的 DOM 操作不是最优的, 如果在上边加上一层能让整体变快的话?是有这个意思, 只不过 virtual DOM 在语义上和真实的 DOM 有所差别.最主要的是, virtual DOM 的操作, 不保证马上就会产生真实的效果.这样就使得 React 能够等到事件循环的结尾, 而在之前完全不用操作真实的 DOM。在这基础上, React 计算出几乎最小的 diff, 以最小的步骤将 diff 作用到真实的 DOM 上。批量处理 DOM 操作和作用最少的 diff 是应用自身都能做到的.任何应用做了这个, 都能变得跟 React 一样地高效。但人工处理出来非常繁琐, 而且容易出错. React 可以替你做到。

前面提到 virtual DOM 和真实的 DOM 有着不用的语义, 但同时也有明显不同的 API。

DOM 树上的节点被称为元素, 而 virtual DOM 是完全不同的抽象, 叫做 components。

component 的使用在 React 里极为重要, 因为 components 的存在让计算 DOM diff 更高效。

简单的说就是:

当然如果真的这样大面积的操作 DOM,性能会是一个很大的问题,所以 React 实现了一个虚拟 DOM,组件 DOM 结构就是映射到这个虚拟 DOM 上,React 在这个虚拟 DOM 上实现了一个 diff 算法,当要更新组件的时候,会通过 diff 寻找到要变更的 DOM 节点,再把这个修改更新到浏览器实际的 DOM 节点上,所以实际上不是真的渲染整个 DOM 树。这个虚拟 DOM 是一个纯粹的 JS 数据结构,所以性能会比原生 DOM 快很多。

最新文章

  1. QQ个人文件夹中的文件被占用,解决办法
  2. 解决sublime3 package control显示There are no packages available for installation
  3. usb设备驱动描述,王明学learn
  4. Windows 下Apace tomcat
  5. Linq 中查询一个表中指定的字段
  6. 二招解决php乱码问题
  7. 关于for循环条件性能问题
  8. Sqoop导入MySQL数据
  9. html css 如何将表头固定(转)
  10. 负载均衡集群中的session解决方案
  11. jQuery 插件开发 笔记
  12. js ||与&&
  13. char、varchar和nvarchar的区别
  14. Django之权限
  15. LNMP分离部署
  16. QLayout: Attempting to add QLayout XXX to XXX, which already has a layout
  17. Flutter - 自动生成Android & iOS图标
  18. spring cloud: 使用consul来替换eureka
  19. [AWS] Deploy react project on EC2
  20. Running Elixir in Docker Containers

热门文章

  1. chckBox样式的修改
  2. POJ 3228 Gold Transportation
  3. 01springMVC入门
  4. [SharePoint][SharePoint Designer 入门经典]Chapter8 XSLT数据试图和表单
  5. 关于Windows通过远程桌面訪问Ubuntu
  6. 安装ftp碰到的问题及解决方法
  7. hdoj--2579--Dating with girls(2)(搜索+三维标记)
  8. Centos6.5添加Epel和Remi源安装Lamp环境
  9. ROS-Rviz-turtlebot3仿真信息查看
  10. PHP函数十进制、二进制、八进制和十六进制转换函数说明