什么是虚拟dom
虚拟dom就是一个特殊的对象。
Vue之所以运行高效,因为采用了虚拟dom,减少了对真实的dom操作。
一、dom和虚拟dom对比
//dom
<ul id='test'>
<p class='hehe'>这里是p标签</p>
</ul>
//对应的虚拟dom对象
let vdom={
tag:'ul',
attr:{
id:'test'
},
content:[
{
tag:'p',
attr:{
class:'hehe'
},
content:'这里是p标签'
}
]
}
//将虚拟dom转为真实dom基本操作:
let ul=document.createElement(vdom.tag);
ul.id=test;
let p=document.createElement(vdom.content.tag);
ul.p.class=hehe;
//再通过append方法添加...等操作
二、dom操作和虚拟dom操作耗时对比:
let num=0
console.time('test')
// 方式一:平均 60ms 80ms
for (var i = 0; i < 10000; i++) {
let tmp=Number(document.getElementById('test').innerHTML)
document.getElementById('test').innerHTML=tmp+1
}
console.timeEnd('test');
//方式二: 平均 1ms 0.6ms
//let num=0
//console.time('test')
// for (var i = 0; i < 10000; i++) {
// num++
// }
// document.getElementById('test').innerHTML=num
// console.timeEnd('test');
三、虚拟dom实现过程:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>虚拟dom</title>
</head>
<body>
<span id='test'></span>
<ul id='test'>
<p class='hehe'>这里是p标签</p>
<li>{{1+1}}</li>
</ul>
</body>
<script>
//虚拟dom实现过程:
// 1.根据真实dom产生虚拟dom? 虚拟dom?就是一个特殊对象(经过一些处理能产生真实dom)
let vdom={
tag:'ul',
attr:{
id:'test'
},
content:[
{
tag:'p',
attr:{
class:'hehe'
},
content:'这里是p标签'
},
{
tag:'li',
content:1
}
]
}
// 2.进行编译解析
let vdom={
tag:'ul',
attr:{
id:'test'
},
content:[
{
tag:'p',
attr:{
class:'hehe'
},
content:'这里是p标签'
},
{
tag:'li',
content:2
}
]
}
//3.将虚拟dom 变成真实dom 也就 挂载
//4.数据发生变化 产生新的虚拟dom
let vdom={
tag:'ul',
attr:{
id:'test'
},
content:[
{
tag:'p',
attr:{
class:'hehe'
},
content:'这里是p标签'
},
{
tag:'li',
content:2
},
{
tag:'li',
content:2
}
]
}
//5、将数据变化后的虚拟dom 和之前的虚拟dom 通过differ 算法 进行比对
// 6、比对之后更新视图 一样的不变 不一样重新渲染
</script>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南