虚拟DOM(virtual Dom)简介

当一个网页加载的时候,流程如下
1.生成dom树
2.生成css树
3.将dom树 和 css规则树关联起来,生成render树
4.布局
5.绘制

当我们用原生或者jquery直接去操作dom的时候,浏览器将会对dom树进行回流和重绘,十分耗费性能,可能造成页面卡顿。

如何解决这个问题呢?

我们只需要引入一颗模拟了dom树的js对象树,通过操作js代替操作dom,将最终的虚拟节点渲染出来,从而节省性能

这个技术就叫做虚拟dom(virtual Dom)

virtual Dom可以看作一颗模拟了dom树的js对象树,主要是通过vnode(虚拟节点)模拟真实dom节点的结构
组件状态发生变化的时候,触发virtual Dom的数据变化,然后比对virtual Dom和真实DOM,在利用diff算法对真实dom进行更新,实质上就是一种模拟DOM的js数据结构

虚拟dom的使用基本流程

​ 1.获取数据
​ 2.创建vdom
​ 3. 通过render函数解析jsx(语法糖),将其转换成 vdom结构
​ 4.将vdom渲染成真实dom
​ 5.数据更改了
​ 6.使用diff算法比对两次vdom,生成patch对象(返回key)
​ 7.根据key将patch对象渲染到页面中改变的结构上,而其他没有改变的地方是不做任何修改的( 虚拟dom的惰性原则 )

优点:

保证性能下限: 框架的虚拟 DOM 需要适配所有PI 可能产生的操作,它的一些 DOM 操作的实现必须是普适的,所以它的性能并不是最优的;但是比起粗暴的 DOM 操作性能要好很多,因此框架的虚拟 DOM 至少可以保证在你不需要手动优化的情况下,依然可以提供还不错的性能,即保证性能的下限;

无需手动操作 DOM: 我们不再需要手动去操作 DOM,只需要写好 View-Model 的代码逻辑,框架会根据虚拟 DOM 和 数据双向绑定,帮我们以可预期的方式更新视图,极大提高我们的开发效率;

跨平台: 虚拟 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下虚拟 DOM 可以进行更方便地跨平台操作,例如服务器渲染、weex 开发等等。

缺点:

无法进行极致优化: 虽然虚拟 DOM + 合理的优化,足以应对绝大部分应用的性能需求,但在一些性能要求极高的应用中虚拟 DOM 无法进行针对性的极致优化。

diff算法在写,明天更

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言   Vue2.0引入了虚拟DOM,比Vue1.0的初始渲染速度提升了2~4倍,并大大降低了内存消耗。目前主流...
    A郑家庆阅读 13,555评论 0 10
  • 摘要: 什么是虚拟DOM? 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有。 前言 Vue.js 2...
    Fundebug阅读 7,426评论 0 6
  • 文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 Re...
    李轻舟阅读 3,092评论 2 14
  • Virtual DOM是React中的一个很重要的概念,在日常开发中,前端工程师们需要将后台的数据呈现到界面中,同...
    SherHoooo阅读 1,014评论 3 5
  • 今天觉得自己是一个双重人格,晚上写的,白天可以全部推翻,怎么能这样,把什么都写上去。不该讲的该讲的,敢讲不敢讲的。...
    ziyoou阅读 202评论 0 0