Vue虚拟DOM之snabbdom
Posted 许全通
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue虚拟DOM之snabbdom相关的知识,希望对你有一定的参考价值。
什么是虚拟DOM?为什么要使用虚拟DOM?
虚拟DOM(virtual DOM)就是使用javascript对象来描述DOM。
原生JS或JQ操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。在一次操作中,我需要更新10个DOM节点,浏览器收到第一个更新请求后并不知道还有9次更新操作,因此会马上执行流程,最终执行10次。
使用虚拟DOM可以先反映在JS对象(虚拟DOM)上,操作内存中的JS对象效率更高,等更新完成后,再将最终的JS对象映射成真实的DOM,交由浏览器去绘制。
snabbdom的核心
- 首先init()函数用来加载模块,并且返回patch函数
- 使用h()函数创建虚拟DOM描述的真实DOM
- 使用patch函数比较新旧两个vnode
- 把变化的DOM节点更新到真实DOM树
import { init } from \'snabbdom/build/package/init\'
import { h } from "snabbdom/build/package/h"
const patch = init([])
// 第一个参数:标签+选择器
// 第二个参数:如果是字符串就是标签中的文本内容
let vnode = h(\'div#container.cls\', \'hello world xuquantong\')
let app = document.querySelector(\'#app\')
// patch函数第
// 第一个参数:旧的vnode,可以是DOM元素,dom元素会转换成vnode
// 第二个参数:新的vnode
// 返回新的vnode,也就是第二个参数
let oldVnode = patch(app, vnode)
vnode = h(\'div#container.xxx\', \'hello zhangyanzhen\')
patch(oldVnode, vnode)
以上是关于Vue虚拟DOM之snabbdom的主要内容,如果未能解决你的问题,请参考以下文章