vue3
2025年3月16日大约 2 分钟
vue3
速度更快、体积减少、更易维护、更接近原生、更易于使用
比较:
- 重写了虚拟dom实现
- 编译模板优化
- 更高效的组件初始化
- undate性能提高
- SSR速度提高2~3倍
新特性
- framents
支持多个根节点 - teleport
传送,在逻辑位置写模板代码,然后再vue范围之外渲染他
它可以出现在任何地方 - 组合式api
- createRenderer
自定义渲染器,将vue的开发模型扩展到其他平台
vue3优化
- diff算法优化:
对会发生变化的地方增加了flag标记,变化时直接找到该地方进行比较 - 静态提升:
对不参与更新的元素,会做静态提升,只会被创建一次,渲染时直接复用 - 事件监听缓存:
默认情况下绑定事件行为会被视为动态绑定,所以每次都会追踪他的变化 - SSR优化:
当静态内容大到一定量级时候,会用createStaticVNode方法在客户端去生成一个static node,这些静态node,会被直接innerHtml,就不需要创建对象,然后根据对象渲染 - 源码体积
移除了一些不常用的API,使用了TreeShanking,不使用的内容都会被摇掉
响应式系统
vue2使用defineProperty来劫持整个对象,深度遍历为每个属性添加getter和setter实现响应式
vue3采用proxy重写了响应式系统,proxy可以对整个对象进行监听,不需要深度遍历
- 监听动态属性的添加
- 监听数组的索引和length属性
- 监听删除属性
defineproperty和proxy实现的区别:
原理,数据更新后,通知相关的依赖函数
defineproperty无法劫持到对象的删除和添加属性的操作,动态的属性不具备响应式,深层的监听也造成了性能的极大问题
proxy劫持整个对象的基本操作,而不是某个属性,多达13种拦截方法