vue核心之虚拟DOM

  • 一、真实DOM和其解析流程?
  • 二、JS操作真实DOM的代价!
  • 三、为什么需要虚拟DOM,它有什么好处?
  • 四、实现虚拟DOM

一、真实DOM和其解析流程?

浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting
第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建)。
第二步,用CSS分析器,分析CSS文件和元素上的inline样式,生成页面的样式表。
第三步,将DOM树和样式表,关联起来,构建一颗Render树(这一过程又称为Attachment)。每个DOM节点都有attach方法,接受样式信息,返回一个render对象(又名renderer)。这些render对象最终会被构建成一颗Render树。
第四步,有了Render树,浏览器开始布局,为每个Render树上的节点确定一个在显示屏上出现的精确坐标。
第五步,Render树和节点显示坐标都有了,就调用每个节点paint方法,把它们绘制出来。
DOM树的构建是文档加载完成开始的?构建DOM数是一个渐进过程,为达到更好用户体验,渲染引擎会尽快将内容显示在屏幕上。它不必等到整个HTML文档解析完毕之后才开始构建render数和布局。
Render树是DOM树和CSSOM树构建完毕才开始构建的吗?这三个过程在实际进行的时候又不是完全独立,而是会有交叉。会造成一边加载,一遍解析,一遍渲染的工作现象。
CSS的解析是从右往左逆向解析的(从DOM树的下-上解析比上-下解析效率高),嵌套标签越多,解析越慢。

二、JS操作真实DOM的代价!

用我们传统的开发模式,原生JS或JQ操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。在一次操作中,我需要更新10个DOM节点,浏览器收到第一个DOM请求后并不知道还有9次更新操作,因此会马上执行流程,最终执行10次。

例如,第一次计算完,紧接着下一个DOM更新请求,这个节点的坐标值就变了,前一次计算为无用功。计算DOM节点坐标值等都是白白浪费的性能。即使计算机硬件一直在迭代更新,操作DOM的代价仍旧是昂贵的,频繁操作还是会出现页面卡顿,影响用户体验。

三、为什么需要虚拟DOM,它有什么好处?

Web界面由DOM树(树的意思是数据结构)来构建,当其中一部分发生变化时,其实就是对应某个DOM节点发生了变化

虚拟DOM就是为了解决浏览器性能问题而被设计出来的。如前,若一次操作中有10次更新DOM的动作,虚拟DOM不会立即操作DOM,而是将这10次更新的diff内容保存到本地一个JS对象中,最终将这个JS对象一次性attch到DOM树上,再进行后续操作,避免大量无谓的计算量。所以,用JS对象模拟DOM节点的好处是,页面的更新可以先全部反映在JS对象(虚拟DOM)上,操作内存中的JS对象的速度显然要更快,等更新完成后,再将最终的JS对象映射成真实的DOM,交由浏览器去绘制。

四、实现虚拟DOM

例如一个真实的DOM节点。

我们用JS来模拟DOM节点实现虚拟DOM。

其中的Element方法具体怎么实现的呢?

第一个参数是节点名(如div),第二个参数是节点的属性(如class),第三个参数是子节点(如ul的li)。除了这三个参数会被保存在对象上外,还保存了key和count。其相当于形成了虚拟DOM树。

有了JS对象后,最终还需要将其映射成真实DOM

文章借鉴:简书,链接:https://www.jianshu.com/p/af0b398602bc。

面试准备—vue核心之虚拟DOM(vdom)相关推荐

  1. vue核心之虚拟DOM(vdom)与真实DOM页面渲染过程

    一.真实DOM和其解析流程? 浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树--创建StyleRules--创建Render树--布局Layout--绘制Painting 第一步,用HTM ...

  2. 探秘vue核心之虚拟DOM与diff算法

    探秘vue核心之虚拟DOM与diff 一.真实DOM和其解析流程 所有的浏览器渲染引擎工作流程大致分为5步: 创建 DOM 树 -> 创建 Style Rules -> 构建 Render ...

  3. 浅谈Vue中的虚拟DOM

    Virtual DOM 是JavaScript按照DOM的结构来创建的虚拟树型结构对象,是对DOM的抽象,比DOM更加轻量型 为啥要使用Virtual DOM 当然是前端优化方面,避免频繁操作DOM, ...

  4. [vue] 什么是虚拟DOM?

    [vue] 什么是虚拟DOM? 虚拟 dom 是相对于浏览器所渲染出来的真实 dom 的,在react,vue等技术出现之前,我们要改变页面展示的内容只能通过遍历查询 dom 树的方式找到需要修改的 ...

  5. 简单实现Vue中的虚拟dom

    简单实现Vue中的虚拟dom 传送门:简单实现Vue中的插值替换(三) 前言: 要想简单实现虚拟dom,首先我们要了解虚拟dom,知道自己要实现的是个什么东西. 说起来,我刚开始学习Vue的时候对虚拟 ...

  6. vue 中的虚拟dom树

    虚拟DOM树其实就是一个普通的js对象,它是用来描述一段HTML片段的 当页面渲染的时候Vue会创建一颗虚拟DOM树 当页面发生改变Vue会再创建一颗新的虚拟DOM树 前后两颗新旧虚拟DOM树进行对比 ...

  7. vue xunidom_vue的虚拟dom(Virtual DOM )

    模板转换成视图的过程 在底层实现中Vue会将模板编译成渲染函数,当然我们也可以不写模板,直接写渲染函数,以获得更好的控制. 渲染函数:渲染函数是用来生成Virtual DOM的: VNode虚拟节点: ...

  8. 面试中的网红虚拟DOM,你知多少呢?深入解读diff算法

    深入浅出虚拟DOM和diff算法 一.虚拟DOM(Vitual DOM) 1.虚拟DOM(Vitual DOM)和diff的关系 2.真实DOM的渲染过程 3.虚拟DOM是什么? 4.解决方案 - v ...

  9. 面试官:什么是虚拟DOM?如何实现一个虚拟DOM?

    故心故心故心故心小故冲啊 文章目录 一.什么是虚拟DOM 二.为什么需要虚拟DOM 三.如何实现虚拟DOM 小结 参考文献 一.什么是虚拟DOM 虚拟 DOM (Virtual DOM )这个概念相信 ...

最新文章

  1. php eval 语法错误,PHP eval和捕获错误(尽可能多)
  2. 《C++ Primer》7.4节练习
  3. python输出字母金字塔可以输入字母和行数的_python实现输入任意一个大写字母生成金字塔的示例...
  4. Java字节码4-使用Java-Agent实现一个JVM监控工具
  5. 面试题 04.01. 节点间通路
  6. 大师兄科研网_拜托啦,师兄!
  7. MySql explain命令详解
  8. MS SQL的某一数据库成了Single User模式
  9. html5类似ios下拉选择器,iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 - mufc-go...
  10. php 去除零宽度空格,如何在PHP变量中去除空格?
  11. ussd代码大全_USSD查询器app
  12. Windows窗口程序
  13. 微软时间服务器同步错误,Windows Server 设置时间同步出错问题
  14. 大学计算机专业那些课 --左飞
  15. matlab将一列数分割为若干组,将数据拆分为不同组并计算统计量
  16. 有道云笔记linux使用教程,办公必备神器系列五:云笔记:为知笔记、印象笔记、有道云笔记...
  17. ArcGIS 10 Desktop 最简安装及完全破解-- 终结者版本
  18. WebDAV之葫芦儿•派盘+麻雀记
  19. 红外热成像传感器介绍
  20. 机器人课程教师面对的困境有哪些

热门文章

  1. solidity数据类型(四)storage memory calldata modifier前置条件 继承 接口合约 导入库 using...for solc编译
  2. 【NOIP2017模拟9.3A组】摘果子
  3. 小别离三个演员都长大了,确定他们这不是成长日常
  4. NF网元介绍之AMF
  5. 一款无需下载,在线就可以制作的电子相册制作工具
  6. 下面不属于c语言的数据类型是,下面不属于C++语言的基本数据类型的是()。...
  7. EXCEL如何隔3行插入1空行?
  8. java wrapper作用_Java Service Wrapper使用总结
  9. 前端性能优化--预加载技术
  10. ATAC-Seq 数据分析(上)