答案是肯定的。 

说起Vue3的改进,很多人都会说出响应式的改变,与Vue2相比,Vue3采用了proxy的方式对响应式做了重写,而Vue2则是采用defineProperty的方式将对象的属性进行深度遍历,而这种方式想要实现响应式的前与后,就需要给每个属性添加setter和getter。但Vue3做了改进,通过使用proxy的方式,则不需要深度遍历了,他实现了删除属性的监听、数组索引的监听以及动态属性添加的监听。

这些我发现很多人都是可以回答出来的,但这些回答远远是不够的,下面我们说一些在面试中需要更丰富的回答。

目录

1 源码体积有所减少

1.1 源码体积很重要?

1.2 做了哪些优化?

1.3 用代码举例子

2 开发以及编辑阶段

2.1 静态片段

2.2 动态事件的缓存

2.3 元素静态提升

2.4 diff算法的更新

3 Vue2的更新汇总一下

4 吐槽两句 

 

1 源码体积有所减少

1.1 源码体积很重要?

源码体积是一个非常重要的指标。较大的源码体积会增加应用程序的加载时间,导致性能下降,并可能影响用户体验。此外,对于移动端或者网络条件较差的用户来说,大体积的源码可能会导致加载过慢甚至加载失败的问题。

1.2 做了哪些优化?

Vue 3 在许多方面都进行了优化,其中之一就是源码体积的减小。这得益于更好的 Tree-shaking 支持、源码重写以及按需引入 API 等改进。

任何一个函数,如ref、reavtived、computed等,仅仅在用到的时候才打包,从而使打包的整体体积变小。

1.3 用代码举例子

即便你没有使用过Vue3,那么在回答问题的时候也应该有所体现,尤其是开发人员,代码体现很重要,你可以使用这面这段真实业务场景的代码示例,代码如下:

// vue3代码

import { ref, reactive, computed } from 'vue';

// 只有在使用时才会引入相关模块

const data = ref(0); // ref 模块

const obj = reactive({ value: 0 }); // reactive 模块

const double = computed(() => data.value * 2); // computed 模块

console.log(data.value); // 打包时只包含 ref 相关的代码

console.log(obj.value); // 打包时只包含 reactive 相关的代码

console.log(double.value); // 打包时只包含 computed 相关的代码

2 开发以及编辑阶段

2.1 静态片段

如果你需要开发的组件中,静态HTML内容较多,或者已经达到一定的量级的时候,框架中有createStaticVNode会在客户端去生成一个static node,也就是静态node片段,会被直接innerHTML到目标节点上,就不需要创建对象,然后根据对象渲染

编译前的代码片段:

div>

内容1

... // 这里有N个内容

{{ contentMsg }}