1.Vue3.0性能提升的主要方面有哪些?1.响应式系统改进Vue2初始化时,使用definepropery为data中的每个属性调用getter和setter,使其成为响应式对象。如果属性值是对象,会递归调用defineproperty使其成为响应式对象。Vue3使用代理对象重写响应式样式。代理的性能优于defineproperty。Proxy可以拦截属性的访问、赋值、删除等操作。它在不需要初始化的时候遍历所有的属性。如果前端训练有多层属性嵌套,只有在访问某个属性时,才能递归处理下一层的属性。优点:可以监控动态添加的属性;可以监控删除的属性;可以监控数组索引和长度属性;编译优化优化编译重写虚拟dom,使得首次渲染和更新dom的性能得到大幅提升。vue2通过标记静态根节点,优化diff算法vue3标记升级所有静态根节点,diff时只比较动态节点内容的片段,不需要在模板中创建唯一的根节点,可以直接放标签同级别和文本内容静态改进patchflag,跳过静态节点,直接与动态节点对比,缓存事件处理功能源码体积优化Vue3去掉了一些不常用的API,比如:inline-template,filter等。Vue2.x使用的tree-shakingCompositionApi和OptionsApi之间的区别?区别?OptionsApi包含一个描述组件选项(数据、方法、道具等)的对象选项;API开发复杂组件,相同功能逻辑的代码拆分成不同的选项;使用mixin复用普通代码也存在问题:命名冲突,数据来源不明确;compositionApivue3是一套新的API,是基于函数的API,可以更加灵活的组织组件的逻辑。解决optionsapi在大型项目中不易拆分复用的问题。Proxy比Object.defineProperty有什么优势?代理的性能优于defineproperty。Proxy可以拦截属性的访问、赋值、删除等操作。它在没有初始化的情况下遍历所有属性。另外,如果有多层属性嵌套,web前端训练只能访问某个属性。只有下一层的属性才会被递归处理。它可以*监视数组变化并可以劫持整个对象。操作的不是原来的对象,而是newProxy返回的新对象。可以劫持的操作有13种。Vue3.0在编译方面有哪些优化?在vue.js3.x中,所有静态节点都被标记和提升。diffing时只需要比较动态节点的内容;Fragments(升级vetur插件):模板中不需要唯一根节点,可以直接静态提升文本或同级标签。(hoistStatic),当使用hoistStatic时,所有静态节点都被提升出render方法。它只会在应用程序启动时被创建一次,然后应用程序只需要提取的静态节点就会被使用,并且会随着每次渲染被检索不断重复使用。patchflag,在动态标签末尾添加相应的标记,只有带有patchFlag的节点才被认为是动态元素,会被跟踪进行属性修改,无需逐层遍历即可快速找到动态节点,提高了虚拟dom差异的性能。缓存事件处理函数cacheHandler,避免每次触发都要重新生成一个新的函数来更新之前的函数。treeshaking通过摇树优化核心库的大小,减少不必要的代码。Vue.js3.0响应式系统的实现原理?reactive将对象设置为反应对象。接收一个参数,判断参数是否为对象。如果不是对象,则不做响应处理,直接返回该参数。创建拦截器处理程序并设置get/set/deleteproperty。get收集依赖项(跟踪);如果当前key的值为对象,则为当前key的对象创建一个拦截器handler,并设置get/set/deleteProperty;如果当前键的值不是对象,则返回当前键的值。当set设置的新值不等于旧值时,更新为新值并触发更新(trigger)。deleteProperty当当前对象有这个key时,删除这个key并触发更新(trigger)。effect接受一个函数作为参数。作用是:访问响应式对象属性时,收集依赖track接收两个参数:target和key-如果没有activeEffect,说明没有创建效果依赖-如果有activeEffect,则判断WeakMap集合中是否有target属性-WeakMap集合中如果没有target属性,则set(target,(depsMap=newMap()))-如果WeakMap集合中有target属性,则判断是否target属性的map值的depsMap中有key属性-如果depsMap中没有key属性,则设置(key,(dep=newSet()))-如果depsMap中有key属性,然后添加这个activeEffect4.trigger,判断WeakMap中是否有target属性,如果WeakMap中有target属性,则判断target属性的map值中是否有key,如果有,集合的effect()被触发d在一个循环中。文章来自前端小搬运工
