虚拟dom

  1. 什么是虚拟 dom ?
    所谓的虚拟DOM,顾名思义并不是真实的Dom,它其实就是用 JS 来模拟DOM结构,把DOM的变化操作放在JS层来做,尽量减少对DOM的操作。然后对比前后两次的虚拟DOM的变化,只重新渲染变化了的部分,而没有变化的部分则不会重新渲染。前后的两次对比通过 diff 算法进行对比操作, 如下图所示。

  2. 通过 js 对象模拟DOM树的数据结构
    一个真实的DOM

<div id="content">
    <p>{{ 1+1}}</p>
    <ul class="list-group">

    </ul>
</div>

虚拟DOM

	//1.内存中生成一颗虚拟dom树
var vDom = {
    tag:"div",
    attr:{
        id:"content"
    },
    children:[
        {tag:"p",content:2},
        {tag:"ul",attrs:{className:"list-group"}}
    ]
}
  1. 为什么要用虚拟DOM渲染?
    处理虚拟DOM的速度比操作真实DOM更快。

  2. 虚拟DOM操作的流程

	<div id="content">
    <p>{{ 1+1}}</p>
    <ul class="list-group">

    </ul>
</div>

<script>
    var data = {
        arr:[]
    }

    //1.内存中生成一颗虚拟dom树 
    var vDom = {
        tag:"div",
        attr:{
            id:"content"
        },
        children:[
            {tag:"p",content:2},
            {tag:"ul",attrs:{className:"list-group"}}
        ]
    }

    //2.将内存中的虚拟dom树初始化渲染成真实dom树
    //3.当我们修改data里面的数据的时候
    data.arr.push("<li>111111</li>")
    data.arr.push("<li>222222</li>")
    //4.将之前的虚拟dom树结合新的数据生成一颗新的虚拟dom树
    var newDom = {
        tag:"div",
        attr:{
            id:"content"
        },
        children:[
            {tag:"p",content:2},
            {tag:"ul",attrs:{className:"list-group"},children:[
                {tag:"li",content:"11111"},
                {tag:"li",content:"22222"}
            ]}
        ]
    }
    //5.将此次生成好的新的虚拟dom树与上一次的虚拟dom树结构进行对比,对比差异(diff算法)
    //6.将对比出来的差异的部分进行重新真实dom结构的渲染


    /*
        内部当数据变化,生成一颗新的虚拟dom树,与上一次的虚拟dom树结构进行对比。也就是说,当数据变化的时候,
        大量操作的是虚拟dom,而虚拟dom属于内存数据,操作起来性能要高的多。而真实的dom操作,只有在追加的那一刻
        才会进行操作,大大提升了性能。
    */


</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值