浅谈VUE虚拟dom

Dom操作是比较浪费时间和性能的,当数据量很大时,更新DOM是非常耗费性能的操作。
当我们使用Javascript来修改我们的页面,浏览器已经做了一些工作,以找到DOM节点进行更改,例如:

document.getElementById('myId').appendChild(myNewNode);

在现代的应用中,会有成千上万数量个DOM节点。所以在数据更新的时候产生的计算非常昂贵。
琐碎且频繁的更新会使页面缓慢,同时这也是不可避免的。虚拟Dom技术就是用于提高页面更新的速度。

简单来讲虚拟Dom技术的核心就是使用js对象来替代dom节点。
举个栗子:
DOM节点在HTML文档中的表现通常是这样的

<ul id='list'>
  <li>Item 1</li>
  <li>Item 2</li>
<ul>

DOM节点也可以表示为一个JavaScript对象,就像这样

//用Javascript代码表示DOM节点的伪代码
Let domNode = {
  tag: 'ul'
  attributes: { id: 'list' }
  children: [
 //这里是 li
  ]
};

当我们更新虚拟节点时

//更新虚拟DOM的代码
domNode.children.push('<ul>Item 3</ul>');

如果我们用一个虚拟DOM,而不是直接调用像.getElementById的方法,这样只操作JavaScript对象,这样是相当方便的。

然后,再把更改的部分更新到真正的DOM,方法如下:

//这个方法是调用DOM API来更改真正DOM的 它会分批执行从而获取更高的效率
sync(originalDomNode, domNode);

凡事都有两面性,引入虚拟DOM实际上有优点也缺点。

1>尺寸

更多的功能意味着更多的代码。幸运的是Vue.js 2.0仍然是相当小的(21.4kb当前版本)。

2>内存
虚拟DOM需要在内存中的维护一份DOM的副本。在DOM更新速度和使用内存空间之间取得平衡。

应用场景
虚拟DOM不是适合所有情况
如果虚拟DOM大量更改,这是合适的。
But ……如果单一的,频繁的更新的话,虚拟DOM将会花费更多的时间处理计算的工作。
所以,如果你有一个DOM节点相对较少页面,用虚拟DOM,它实际上有可能会更慢。
但对于大多数单页面应用,这应该都会更快。

表述不到位的地方,还请大神多多补充、指出。
以上。END

猜你喜欢

转载自blog.csdn.net/MrLiber/article/details/79036828