vue3.0的设计目标
更小
更快
加强TypeScript支持
加强API设计一致性
提高自身可维护性
开放更多底层功能
]######1.性能方面的优化
双向响应原理由Object.defineProperty
改为基于ES6的Proxy
,速度更快,且消除了之前存在的警告;
重写了 Vdom ,突破了 Vdom 的性能瓶颈
进行了模板编译的优化
进行了更加高效的组件初始化
vue3.0将 vdom 更新性能由与模版整体大小相关提升为与动态内容的数量相关
之前vue2中的 Object.defineProperty
存在兼容性问题,所以只能兼容到ie8。
而且Object.defineProperty
是一个相对比较昂贵的操作,因为它直接操作对象的属性,颗粒度比较小。将它替换为es6的Proxy
,在目标对象之上架了一层拦截,代理的是对象而不是对象的属性。这样可以将原本对对象属性的操作变为对整个对象的操作,颗粒度变大。
javascript引擎在解析的时候希望对象的结构越稳定越好,如果对象一直在变,可优化性降低,proxy
不需要对原始对象做太多操作。
2.Tree-Shaking
缩小vue3的体积,将一些不需要的内容去除。只有需要的内容才会打入包中。
优化后的 Vue3.0 的打包体积只有原来的一半(13kb)。哪怕把所有的功能都引入进来也只有23kb,依然比 Vue2.x 更小。像 keep-alive
、 transition
甚至 v-for
等功能都可以按需引入。
3.Fragments
不再限制 template 只有一个根节点。
类似于react的空节点。
4.更好的typeScript支持
5.组合式api
1️⃣setup()
vue3.0将组件的逻辑都写在了函数内部,setup()
会取代vue2.x的data()函数,返回一个对象,暴露给模板,而且只在初始化的时候调用一次,因为值可以被跟踪。
2️⃣新的函数api:const count = value(0)
详细内容见 vue3.0新特性笔记3