• 【前端面试必知】什么是虚拟DOM


    前言

    本系列主要整理前端面试中需要掌握的知识点。本节介绍什么是虚拟DOM。


    一、什么是虚拟DOM

    • 虚拟DOM是对真是DOM的抽象,以JavaScript对象(VNode节点)作为基础的树,用对象的属性来描述节点,最终可以通过一系列操作使这棵树映射到真实环境上。
    • Javascript对象中,虚拟DOM表现为一个Object对象,并且最少包含标签名(tag)、属性(attrs)和子元素对象(children)三个属性。
    • 创建虚拟DOM就是为了更好将虚拟的节点渲染到页面视图中,所以虚拟DOM对象的节点与真实DOM的属性一一照应。
    • 真实DOM
    <div id="app">
        <p class="p">节点内容</p>
        <h3>{{ foo }}</h3>
    </div>
    
    • 1
    • 2
    • 3
    • 4
    • 实例化vue
    const app = new Vue({
        el:"#app",
        data:{
            foo:"foo"
        }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 观察render的render,我们能得到虚拟DOM
    (function anonymous(
    ) {
    	with(this){return _c('div',{attrs:{"id":"app"}},[_c('p',{staticClass:"p"},
    					  [_v("节点内容")]),_v(" "),_c('h3',[_v(_s(foo))])])}})
    
    • 1
    • 2
    • 3
    • 4
    • 通过VNode,vue可以对这棵抽象树进行创建节点、删除节点以及修改节点的操作,经过diff算法得出一些需要修改的最小单位,再更新视图,减少了dom操作,提高了性能。

    二、为什么需要虚拟DOM

    • DOM其实是很慢的,哪怕一个最简单的div也包含着很多的属性。
    • 因此操作DOM的代价仍旧是昂贵的,频繁操作还是会出现页面卡顿,影响用户的体验。
    • 用传统的原生api或jQuery操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。
    • 如:当要更新10个DOM节点时,浏览器收到第一个更新DOM请求后,并不知道后续还有9次更新操作,会马上执行流程,最终执行10次流程。通过VNode,同样更新10个DOM节点,虚拟DOM不会立即操作DOM,而是将这10次更新的diff内容保存到本地的一个js对象中,最终将这个js对象一次性attach到DOM树上,避免大量的无谓计算
    • 虚拟DOM最大的优势在于抽象了原本的渲染过程,实现了跨平台的能力,不仅仅局限于浏览器的DOM,还可以是其他组件。

    三、面试官:介绍一下虚拟DOM

    回答:虚拟DOM是对真实DOM的一种抽象,会根据DOM标签的名字、属性、孩子对真实DOM进行映射。使用虚拟DOM的原因是,真实DOM其实是很慢的,一个简单的标签也包含了许多属性。同时真实DOM进行更新时的过程很笨拙,虚拟DOM使用diff算法,可以很轻便的进行DOM的操作。

  • 相关阅读:
    大数据治理的核心是什么
    MySQL进阶_1.逻辑架构和SQL执行流程
    Cookie和Session详解以及结合生成登录效果
    Mapper.xml文件如何写集合遍历语句
    基于springboot+vue的员工绩效考核与激励系统
    (JAVA)P5707 【深基2.例12】上学迟到
    linux 虚拟机 ping: www.baidu.com: 未知的名称或服务 报错处理
    BUUCTF NewStarCTF 公开赛赛道Week4 Writeup
    日拱一卒,热爱可抵岁月漫长
    2019CCF非专业级别软件能力认证第一轮
  • 原文地址:https://blog.csdn.net/weixin_44337386/article/details/125436521