vue2与vue3的区别

176 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

1.Vue3.0新特性

性能比Vue2.x快1.2~2倍

原因1:

diff方法优化:

vue2中的虚拟dom是全量的对比(每个节点不论写死的还是动态的都会比较)

vue3新增了静态标记(patchflag)与上次虚拟节点对比时,只对比带有patch flag的节点(动态数据所在的节点);可通过flag信息得知当前节点要对比的具体内容

原因2:静态提升

vue2无论元素是否参与更新,每次都会重新创建然后再渲染

vue3对于不参与更新的元素,会做静态提升,只会被创建一次,在渲染时直接复用即可

原因3:时间侦听器缓存

默认情况下onClick会被视为动态绑定,所以每次都会追踪它的变化

但是因为是同一个函数,所以不用追踪变化,直接缓存起来复用即可

原因4:ssr渲染

按需编译,体积比vue2.x更小

组合API(类似react hooks)

更好的Ts支持

暴露了自定义渲染API

更先进的组件

Fragment:模板可以有多个根元素

区别:

 

      数据双向绑定

VDOM(虚拟DOM)

Fragments

Tree-Shanking的支持

Composition API

数据双向绑定

        以前有介绍过  Vue2和Vue3响应式区别_思ۣۖิิۣۖิ❧❦空❧❦的博客-CSDN博客

VDOM

        在vue2中,每次更新真实DOM之前都是对虚拟DOM全量对比  vue3中则是只对比带有标记的,这样大大的减少了非动态内容的对比消耗

可以去 Vue Template Explorer 查看如何标记

​编辑

 Fragments

        vue2在template下只能有一个子节点,而vue3可以有多个

        同时支持render函数和JSX写法,类似于react中,在render函数里写逻辑代码

Tree-Shanking

        相对于vue2来说,减少了打包体积。比如项目当中使用了watch,没有使用computed,那么vue3中就是按需导入watch,再使用,打包时只会打包watch,不会打包compted,而vue2中的实例是单例的,捆绑程序无法检测到当前对象的哪些属性被使用到

Composition API

         Vue3 中新增的功能,它的灵感来自于 React Hooks ,是比 mixin 更强大的存在。

        可以提高代码逻辑的可复用性,从而实现与模板的无关性;同时使代码的可压缩性更强。另外,把 Reactivity 模块独立开来,意味着 Vue3.0 的响应式模块可以与其他框架相组合。

编辑

 如上图,composition-api 把复杂组件的逻辑抽地更紧凑,而且可以将公共逻辑进行抽取。