Vue 虚拟dom与diff算法,入门级理解

虚拟dom:用js模拟dom结构

简单的流程为:数据改变 → 虚拟dom开始计算变更 → 根据变更结果操作对应dom → 视图改变
虚拟dom的操作始终会在真实dom之前

js是如何表达dom的
//html结构树:
<div class="container">
	<ul>
		<li>1</li>
		<li>2</li>
	</ul>
</div>
//js来表达以上结构(vnode,虚拟dom):
{
	tag:'div',
	props:{
		className:'container'
	},
	chindren:[{
		tag:'ul',
		children:[{
			tag:'li',
			children:'1'
		},{
			tag:'li',
			children:'2'
		}]
	}]
}
为什么要使用虚拟dom:

dom操作的性能浪费: 如jquery操作

// 当对一个div下的内容进行替换时,dom会重新渲染,即使内容一样也会被替换 例如
<div id="capture">
	<div>1</div>
	<div>2</div>
	<div>3</div>
</div>
//js代码
var html = '<div>1</div><div>2</div><div>3</div>'
$("#capture").html(html) 
//浏览器打开控制台查看页面可发现,即使内容一样,id=capture下的html也被重新渲染了一次 因此浪费性能
关于diff算法:用最小的代价更新dom,即没有属性变化的,不更新,有属性变化的,更新,diff算法的步骤:

1、初始化页面是JavaScript会初始化dom树
2、状态变更时,JavaScript会重新构造一个dom树
3、两个树对比差异,把差异改变在真正的dom树上,视图更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值