虚拟DOM和diff算法
# 虚拟DOM和diff算法
# snabbdom安装配置
snabbdom是瑞典语单词,单词原意“速度”,在IT方面是著名的虚拟DOM库,是diff算法的鼻祖,Vue源码就借鉴了snabbdom。官方git:https://github.com/snabbdom/snabbdom。
在git上的snabbdom源码是用TypeScript写的,git上并不提供编译好的JavaScript版本,因此如果要直接使用build出来的JavaScript版的snabbdom库,可以从npm上下载:
npm i -D snabbdom
snabbdom库是DOM库,当然不能在nodejs环境运行,所以我们需要搭建webpack和webpack-dev-server开发环境,好消息是不需要安装任何loader。
这里需要注意,必须安装最新版webpack@5,不能安装webpack@4,这是因为webpack4没有读取身份证中exports的能力。
npm i -D webpack@5 webpack-cli@3webpack-dev-server@3
webpack.config.js配置为:
|
|
相应的index.html为:
|
|
# 虚拟DOM简介
真实DOM和虚拟DOM的区别:
diff自然是发生在虚拟DOM上的:
关于DOM如何变为虚拟DOM,属于模板编译原理范畴,不在本笔记学习范围之内
# 生成虚拟DOM(h函数)
h函数用来产生虚拟节点(vnode),比如这样调用h函数:
h('a',{ props:{ href:'http://www.baidu.com'}},'百度')
将得到这样的虚拟节点:
{"sel":"a","data":{props:{href:'http://www.baidu.com'}},"text":"百度"}
渲染回页面后真实的DOM为:
<ahref="http://www.baidu.com">百度</a>
一个虚拟节点往往有这些属性:
|
|
|
|
h函数可以嵌套使用,从而得到虚拟DOM树:
手写h函数
|
|