hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

    • React中context的用法
    • React中Hooks的使用
    • React之immutable的使用
    • React性能优化
    • Redux的使用
    • 为什么项目不使用Redux
    • React配置Webpack开发环境
    • 谈谈Vue/React中的虚拟DOM(VDOM)与Key值
      • 一、DocumentFragment
      • 二、VDOM
        • 什么是虚拟DOM?
        • 为什么要用虚拟DOM?
        • 虚拟DOM的实现步骤?
        • 真实DOM与虚拟DOM示意图
      • 三、Key值的用处
  • JavaScript

  • Vue

  • 混合开发

  • 学习笔记

  • 微信小程序

  • 前端
  • React
hn-failte
2018-08-10

谈谈Vue/React中的虚拟DOM(VDOM)与Key值

# 谈谈Vue/React中的虚拟DOM(VDOM)与Key值

# 一、DocumentFragment

在了解虚拟DOM前,先来了解DOM的一个对象属性——DocumentFragment。

在一次操作中,需要频繁操作DOM时,就可以先将要改变的节点附在DocumentFragment上,之后再将该对象渲染到DOM中,改方法只对DOM进行了一次操作,可以显著提高性能。

但是该方法只适用于局部操作,而在真实的项目中,需要的不仅仅是DocumentFragment,于是就有了虚拟DOM的产生

紧接着,对于这么一个东西,我们先来基本的三连问。是什么?为什么?怎么用?

注意,实际的Vue和React的VDOM实现稍有不同

# 二、VDOM

# 什么是虚拟DOM?

虚拟DOM的本质是一个和真实DOM结构类似的JS对象

# 为什么要用虚拟DOM?

虚拟DOM可以提高浏览器的渲染速度。对比操作JS对象,操作真实的DOM消耗的性能较多,频繁的操作DOM时,优势彰显的更为明显。

# 虚拟DOM的实现步骤?

  • 1、在页面首次渲染时,将要渲染的数据全部加载到虚拟DOM中,而后在一次性渲染到真实DOM上

  • 2、在数据变化时,额外的生成一颗虚拟DOM树

  • 3、通过Diff算法对比修改的部分,而后将修改部分渲染到真实的DOM中

  • 4、释放内存

# 真实DOM与虚拟DOM示意图

真实DOM

虚拟DOM则类似与如下图

# 三、Key值的用处

在一个Vue项目或者React项目中,写循环时,往往会加上key值。那么这个key值到底有多大的用处呢?

  • 首先,在Vue中,存在一个DOM复用机制,会尽量的回收DOM元素进行复用,而这个机制本身是高效的,但很多时候也会造成不可预知的Bug,而在加了key值后,元素就有了一个标识,复用机制不会复用带key值的元素。而React也存在类似的机制。

  • 反之,若使用相同的key值,可以使组件复用,也有可能导致渲染内容缺失。

  • 因此,key值一般来说,最好是独一无二的。

  • 除此之外,虚拟DOM在使用Diff算法进行对比时,若存在key值,可以更高效更迅速。

编辑 (opens new window)
#VDOM
上次更新: 2021/08/05, 12:37:41
React配置Webpack开发环境
new命令原理

← React配置Webpack开发环境 new命令原理→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式