Vue.js 2.0窥探之Virtual DOM到底是什么?
发布时间 - 2026-01-10 22:58:50 点击率:次Virtual DOM是什么?

在之前,React和Ember早就开始用虚拟DOM技术来提高页面更新的速度了。 若想了解它是如何工作的,就要先认清这几个概念:
1.更新DOM是非常昂贵的操作
当我们使用Javascript来修改我们的页面,浏览器已经做了一些工作,以找到DOM节点进行更改,例如:
document.getElementById('myId').appendChild(myNewNode);
在现代的应用中,会有成千上万数量个DOM节点。所以因更新的时候产生的计算非常昂贵。琐碎且频繁的更新会使页面缓慢,同时这也是不可避免的。
2.我们可以用JavaScript对象来代替DOM节点
DOM节点在HTML文档中的表现通常是这样的:
<ul id='myId'> <li>Item 1</li> <li>Item 2</li> <ul>
DOM节点也可以表示为一个JavaScript对象,就像这样:
//用Javascript代码表示DOM节点的伪代码
Let domNode = {
tag: 'ul'
attributes: { id: 'myId' }
children: [
//这里是 li
]
};
这就是虚拟的DOM节点,很好理解吧。
3.更新虚拟节点, 并不昂贵贵
//更新虚拟DOM的代码
domNode.children.push('<ul>Item 3</ul>');
如果我们用一个虚拟DOM,而不是直接调用像.getElementById的方法,这样只操作JavaScript对象,这样是相当便宜的。
然后,再把更改的部分更新到真正的DOM,方法如下:
//这个方法是调用DOM API来更改真正DOM的 //它会分批执行从而获取更高的效率 sync(originalDomNode, domNode);
Vue.js在2.0 版本中引入虚拟DOM是一个正确的选择吗 ?
引入虚拟DOM实际上有优点也缺点。
1、尺寸
更多的功能意味着更多的代码。幸运的是Vue.js 2.0仍然是相当小的(21.4kb当前版本)。
2、内存
虚拟DOM需要在内存中的维护一份DOM的副本。在DOM更新速度和使用内存空间之间取得平衡。
3、不是适合所有情况
如果虚拟DOM大量更改,这是合适的。但是单一的,频繁的更新的话,虚拟DOM将会花费更多的时间处理计算的工作。
所以,如果你有一个DOM节点相对较少页面,用虚拟DOM,它实际上有可能会更慢。
但对于大多数单页面应用,这应该都会更快。
除了性能提升外还有什么
引入虚拟DOM,这不仅仅是一种性能增强,这同时意味着更多的功能。
例如,您可以在虚拟DOM中的 render() 方法直接创建新的节点:
new Vue({
el: '#app',
data: {
message: 'hello world'
},
render() {
var node = this.$createElement;
return node(
'div',
{ attrs: { id: 'myId' } },
this.message
);
}
});
输出:
<div id='app'> <div id='myId'>hello world</div> </div>
为什么这样做?你可以用全编程语言JavaScript编程,您可以创建工厂式的功能来建立虚拟节点。
总结
以上就是在这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# vue
# virtual
# dom
# vue获取dom
# 在vue中获取dom元素内容的方法
# Vue实现virtual-dom的原理简析
# vue的Virtual Dom实现snabbdom解密
# vue动态生成dom并且自动绑定事件
# 利用vue.js插入dom节点的方法
# Vue获取DOM元素样式和样式更改示例
# vue指令以及dom操作详解
# 详解在Vue中通过自定义指令获取dom元素
# 探究Vue.js 2.0新增的虚拟DOM
# Vue AST源码解析第一篇
# 可以用
# 上有
# 您可以
# 的是
# 是一个
# 这是
# 如果你
# 很好
# 会有
# 就像
# 将会
# 是这样
# 这就是
# 它是
# 更高
# 这样做
# 仅仅是
# 更快
# 不可避免
# 会使
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
,怎么在广州志愿者网站注册?
Python高阶函数应用_函数作为参数说明【指导】
Laravel如何实现API版本控制_Laravel版本化API设计方案
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Python正则表达式进阶教程_复杂匹配与分组替换解析
零基础网站服务器架设实战:轻量应用与域名解析配置指南
高端网站建设与定制开发一站式解决方案 中企动力
如何用免费手机建站系统零基础打造专业网站?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在 Pandas 中基于一列条件计算另一列的分组均值
长沙企业网站制作哪家好,长沙水业集团官方网站?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
香港服务器部署网站为何提示未备案?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
IOS倒计时设置UIButton标题title的抖动问题
太平洋网站制作公司,网络用语太平洋是什么意思?
🚀拖拽式CMS建站能否实现高效与个性化并存?
Android自定义控件实现温度旋转按钮效果
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
微信小程序 input输入框控件详解及实例(多种示例)
高防服务器租用指南:配置选择与快速部署攻略
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
免费网站制作appp,免费制作app哪个平台好?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
5种Android数据存储方式汇总
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
制作电商网页,电商供应链怎么做?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
EditPlus中的正则表达式实战(6)
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
如何解决hover在ie6中的兼容性问题
如何在云主机上快速搭建多站点网站?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
使用spring连接及操作mongodb3.0实例
javascript基本数据类型及类型检测常用方法小结
Laravel如何为API编写文档_Laravel API文档生成与维护方法
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
js实现获取鼠标当前的位置
济南网站建设制作公司,室内设计网站一般都有哪些功能?

