Skip to content

虚拟DOM(基于Vue)


DOM操作的速度介于JS原生的API和基于DOM的库(Vue) 优点:

  • 减少操作次数:虚拟DOM可以将多个DOM操作合并成一个,减少了操作DOM的次数,以此来增速。
  • 减少更新的范围:借助DOM diff来实现更新真正需要更新的DOM
  • 跨平台:其本质是JS对象,能够转换为其他的形式。 缺点:
  • 使用额外的函数创建,但是可以使用jsx和xml来简化写法。
  • 要使用其他的工具再次进行转换为JS

原生的DOM操作本质其实很快,但是浏览器的渲染速度并不能跟上(存在不可交互的时间)

一般情况下,在规模较小时,虚拟DOM更快,在超大规模时,由于虚拟DOM存在额外的优化操作,反而是DOM更快

虚拟 DOM 详解

[补充说明]:虚拟 DOM 的核心概念

javascript
// 真实 DOM 对象(浏览器原生)
const actualDOM = document.createElement('div');
actualDOM.className = 'container';
actualDOM.innerHTML = 'Hello World';

// 虚拟 DOM 对象(普通 JS 对象)
const virtualDOM = {
    tag: 'div',
    props: { class: 'container' },
    children: ['Hello World']
};

// Vue 3 的虚拟节点(VNode)
const vnode = {
    type: 'div',
    props: { class: 'container' },
    children: 'Hello World',
    el: null, // 对应的真实 DOM 元素
    key: null,
    __v_isVNode: true
};

Actual DOM:Browser Native Object Virtual DOM:Plain JS Object, to represent what the actual DOM should look like

可以使用vue-template-explorer来将template转换为render函数

DOM diff


虚拟DOM对比算法,得到要运行的DOM操作。使用key的原因也和算法有关