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的核心

  1. 首先init()函数用来加载模块,并且返回patch函数
  2. 使用h()函数创建虚拟DOM描述的真实DOM
  3. 使用patch函数比较新旧两个vnode
  4. 把变化的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的主要内容,如果未能解决你的问题,请参考以下文章

前端笔记虚拟 DOM 库的基本使用 - Snabbdom

前端笔记虚拟 DOM 库的基本使用 - Snabbdom

笔记Vue源码解析之虚拟DOM和diff算法

vue虚拟dom原理

Virtual DOM(虚拟 DOM)

前端知识体系-JS相关虚拟DOM和Diff算法