当前位置: 首页 > Web前端 > vue.js

vue3.0有哪些变化?

时间:2023-03-31 17:44:10 vue.js

发展历程vue.js1.x-----vue.js2.x引入虚拟DOMvue.js2.x存在的问题1)大量数据后源码自身维护导致的渲染和更新性能问题2)兼容性想放弃了,又想兼容一直保留的鸡肋APIvue3.0。优化1)首先,源码优化。vue.js框架本身的优化目的就是让代码更容易开发和维护。源码优化主要体现在使用monorepo和typescript管理开发源码,这样做的目的是提高自身代码的可维护性。vue.js2.x如上图所示。vue.js3如上图所示。与vue.js2.x的源码组织相比,monorepo将这些模块拆分到了不同的包中,每个包都有自己的API、类型定义和测试,使得模块拆分的更加细致,职责划分更加清晰,模块之间的依赖关系也更加清晰,开发者更容易阅读、理解和更改所有模块的源代码,提高代码的可维护性。该包(如reactivity响应库)可以独立于vue.js使用,这样如果用户只想使用vue.js的响应能力,可以单独依赖这个响应库,而不用依赖整个vue.js,减少引用包的大小,而vue.js2.x是源码编写语言做不到这一点:vue.js1.x原生开发,vue.js2.x使用流,vue.js3.x使用typescript2)性能优化源码量优化,去除一些冷门特性,引入tree-shaking技术数据劫持优化,当数据发生变化,为了自动更新DOM,那么数据更新必须被劫持,也就是说,一些数据变化时可以自动执行代码要更新被object.definePropertyAPI劫持的数据的getter和setter,你必须知道截获的key是什么。对于嵌套层次较深的对象,vue3.0使用proxyapi劫持整个对象。请注意,??proxyapi无法监控对内部深层对象的更改。所以vue3.0的处理方式是在getter中递归响应。这样做的好处是真正访问内部对象会变得响应式而不是盲目的递归。无疑是非常重要的,在一定程度上提高性能3)编译优化通过在编译阶段对编译结果进行优化,实现运行时补丁过程的优化。通过编译阶段对静态模板的解析,编译生成块树。块树是基于动态节点指令的模板。嵌套块,每个块内的部分点结构是固定的,每个块只需要使用一个数组来跟踪它包含的动态节点。借助块树,vue.js将vnode更新性能从与模板整体大小相关提升为与动态内容数量相关4)优化逻辑组织vue.js1.xvue.js2.x的编写组件的本质是编写一个包含选项的对象来描述组件。我们称之为optionsAPIoptionsapi根据methods、computed、data、props等不同的options进行分类。组件小这种方法一目了然,但是对于大组件,一个组件可能有多个逻辑关注点。使用选项api时,每个关注点都有自己的选项。Vue.js3.0提供了一个新的api:compositonapi,就是把一个逻辑关注点相关的代码全部放到一个函数中,这样当一个函数需要修改的时候,就不用在文件夹里跳来跳去了5)优化逻辑复用vue.js2.xmixin首先,每个mixin可以定义自己的props,data,它们之间没有感觉,所以很容易定义相同的变量,导致命名冲突。对于组件来说,如果模板使用了当前组件中没有定义的变量,那么就不容易知道这些变量是在哪里定义的。这是因为数据来源不明确。CompositonAPI解决了以上两个问题。除了逻辑复用,它还会有更好的类型支持,因为都是函数,在调用函数的时候,所有的类型都是自然推导出来的,不像optionsapi什么都用这个,compositonapi对treeshaking很友好,并且代码易于压缩6)引入RFC:让每个版本变更可控