首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请系统讲讲 Vue2 与 Vue3 的核心差异(响应式、AP
[问答题]
请系统讲讲 Vue2 与 Vue3 的核心差异(响应式、API 设计、性能与编译器)。
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(98)
分享
纠错
14个回答
添加回答
7
tzone
响应式:vue2使用object.defineProperty,劫持能力有局限,动态增删数组索引和对象属性无法收集,需要重写数组方法和提供$set()方法去兼容,而vue3采用的是proxy,proxy暴露了更强的底层操作能力,对动态增删数组索引和对象的操作也能收集,无需做兼容操作,缺点是proxy不好使用ployfill,浏览器兼容性降低,不支持IE11。 API设计:vue2使用Option API(选项式API),Vue3主推使用Composition API(组合式API),选项式API类似面向对象编程,组合式API类似于函数式编程,函数式编程,通常每个单元是一个函数,单一功能的函数可提高了代码的复用率。代码复用性友好之后,Vue中的Mixins的存在意义也不大了,可以移除。而面向对象编程,使用函数方法需要创建对象实例,函数比实例对象对TS更友好,在打包时,还是使用Tree-Shaking技术将项目未使用的函数剔除。减少体积,提高加载性能。 性能与编译器:Diff算法的优化,vue2是全量diff,存在冗余的对比,vue3新增 Patch Flag 和 静态提升概念希望做到精细化更新,编译器编译时根据节点是否存在动态插值区分动态节点和静态节点,动态节点添加Patch Flag位运算标记,静态节点则做提升,抽离到公共常量,只创建一次,后续从公共常量引用中读取,避免反复创建开销, 后续有变成只对比有Patch Flag的节点。通过减少对比和创建开销最终提升渲染性能。
发表于 2025-09-27 18:17:40
回复(0)
4
vivalavie
在响应式系统上,vue2采用的响应式系统是object.defineProperty,而vue3采用的是proxy,通过proxy的get和set操作对响应式数据进行依赖收集和触发更新。在api设计上,vue2采用了选择式api,vue3采用的是组合式api,vue3相较于vue2来说,组合式api可以有效的减少代码的冗余,提高代码逻辑的复用率,更加灵活;性能上,vue3打包后的体积较vue2更小,性能更优
发表于 2025-09-12 15:06:45
回复(0)
3
秋水夏树
1. 响应式 2. diff 算法(状态提升、补丁标记) 3. 选项式 API / 组合式 API 4. Tree-Shaking 支持 5. 碎片化 6. 与 ts 结合
发表于 2025-09-17 18:20:45
回复(0)
0
求实习的可乐很想提桶
Vue2通过重写数组原型方法(push、pop、splice等)实现监听,无法监听数组下标修改;Vue3用Proxy代理整个数组,能监听下标修改、push/pop等方法调用,还能监听数组长度变化。项目中购物车数组用Vue3响应式,直接修改cart[0].count也能触发UI更新,比Vue2更灵活。
发表于 2026-01-06 00:10:11
回复(0)
0
Luanyouxiu
vue2:响应式:Object.defineProperty;API设计:optionsAPI vue3:响应式:Proxy;API设计:compositionAPI
发表于 2026-01-05 17:39:50
回复(0)
0
信JAVA得永生
数据双向绑定原理 Vue2: Object.defineProperty() Vue3: Proxy 编码风格 vue2: option API(选项式API) vue3: composition API(组合式API) 打包工具、状态管理、语言风格 vue2: webpack、vueX、js vue3: vite、pinia、ts 生命周期 vue2: beforeCreated、created、beforeMount、mouted、beforeDestory、destoryed vue3: 去掉了beforeCreated、created,放置在 setup中, 其余的生命周期在vue2的基础上加了on
发表于 2025-12-24 19:26:06
回复(0)
0
唯见长江天际流
响应式系统,api设计,性能与编译器,新特性
发表于 2025-12-15 16:42:36
回复(0)
0
鱿雨稀
1.响应式的不同,vue2是object.defineProperty,vue3是proxy 2.组织代码的方式也不同,vue2是用选项式API的方式组成逻辑结构,vue3是以组合式API的方式组成逻辑结构3.生命周期也有所不同
发表于 2025-11-26 23:53:10
回复(0)
0
hickey江
vue2使用Object.defineProperty劫持对象属性来进行响应式处理,当对象属性或者增加删除数组索引时无法监听到,而vue3使用proxy劫持整个对象,可以解决vue2的监听限制。 vue2使用options API,vue3可以使用composition API,放在setup里面统一处理,支持setup语法糖,同时vue3完全支持typescript。 编译vue3推出了vite,vite对于vue3的支持比vue2更全面,vue2虽然也可以使用vite,但是需要一些额外的配置,例如一些插件依赖,而vite对比起之前的webpack编译,vite热更新的时候直接更新修改的组件,而不需要编译相关组件,webpack每次更新都需要全量编译一次,所以vite的编译速度更快。而vue3使用的diff算法对比起vue2更加完善,性能上有一定的提升。
发表于 2025-11-24 22:06:21
回复(0)
0
我从未看清
1:响应式:Vue3:基于proxy 可以对对象/数组的增删改的操作做出拦截,拦截后,会触发自动更 新,将更新好的数据返回,页面重新渲染,做到响应式更新。 Vue2:是基于Object.defineProperty,只能监视数据刚开始初始化的属性,若对属性进行 修改,删除等操作,不会同步更新数据,渲染页面dom元素,也就是数据变化了,但页面渲染的 数据没有改变,要想完成响应式数据需要结借助特殊Api进行响应式处理 2:Api设计: Vue3:采用组合式api设计,按照逻辑功能对代码进行编写,使得相关代码功能集中, 能够更好维护和阅读,对于代码的复用也有明显提升,导出导入更为方便 Vue2:采用的是选项式Api设计,数据写在Data,方法写在methods,计算属性, 写在Computed中,异步操作Axion中,想要修改数据还得调用methods的方法提交等,逻辑分散, 复杂,不易阅读维护 3:性能与编译器: Vue3:在编译阶段有着更多方便的新特性,如Tree-shaking:未使用的api不会打包 进入项目,打包后体积能更小。且Patch Flags:可以标记动态节点,diff算法能快速定位到变化 的节点,提升虚拟dom节点的对比效率,在性能上更快,打包体积更小。 Vue2:没有这些特性,不会按需导入api,而是整个一起打包,未使用的也被打包进 项目里。造成体积大,以及没有新特性可以标记动态节点,当项目过大时,会将所有虚拟dom节点 一个一个去比对,效率性能上更慢
发表于 2025-11-24 15:25:25
回复(0)
0
emmarhao
响应式: vue2:采用数据劫持结合发布订阅者模式,通过Object.defineProperty劫持各个属性的get、set,当数据发生变化时发布消息给订阅者,达到数据和视图的同步更新。缺点:1、对象的新增删除无法监听到。2、通过下标改变数组内容无法监听到。 vue3:采用proxyAPI的方式,通过reactive()函数给每一个对象包一层proxy,监听各属性内容,从而达到对数据的监听。 API设计: vue2采用选项是api,vue3采用组合式api。 性能与编译器: vue3体积更小,性能更快,提升50%。vue2使用webpack,vue3使用vite,vite响应更快。
发表于 2025-11-20 09:26:05
回复(0)
0
牛客609425136号
vue3是vue2的全面性升级。核心差异在于:使用Proxy重构响应式系统(解决了动态组件和数据监听),引入了Compositios API(提升代码组织和复用性),在编译时运行(如:Tree-shaking)提升了性能
发表于 2025-11-06 08:50:38
回复(0)
0
rr超级牛牛
1.从响应式底层实现来说,vue2采用definPerporty进行数据劫持,不支持新增数据的响应,而vue3采用proxy劫持,支持新增数据,vue2在初始化的时候就会给每个数据添加响应式,性能较差,vue3在使用的时候才会添加响应式监听。API上,vue2主要采用options API,而vue3主要采用componsible API,可以进行功能函数的封装。vue3在打包的时候不会打包未使用的API,而且编译会标记动态节点,diff算法直接定位变化,大幅提升虚拟dom比对效率。
发表于 2025-11-06 08:49:45
回复(0)
0
安吉拉娜娜
1、响应式:实现的原理不一样,vue2使用object.defineProperty,会有数组push或者对下标进行变更时监听不到的问题,以及一些对象添加和删除无法监听的问题;vue3使用了proxy来代理变量,每个变量都有getter和setter,解决了vue2的响应式问题。当然他们的diff算法也不太一样,vue3用了递增子序列 2、API设计:vue2用了选项式设计,data,method,computed,等都写到一个vue文件当中,vue3使用的是组合式设计,以及usehookl的设计取代了mixin,以及最新的vue3版本逐渐支持无虚拟dom的模式。 3、性能与编译器:vue3使用了proxy对象之后提高效率,并且虚拟dom重写之后,初始化和更新时性能提升了1.3-2倍。体积也更小,通过懒加载机制和更小的包体积,提升了页面加载速度和性能。编译优化方面:vue2是将模板生成AST,然后转换成渲染函数;vue3引入了更加智能的编译优化策略,通过patchFlag和block树等技术,能更精确地识别和处理静态内容,生成更搞笑的代码。
发表于 2025-11-04 23:07:30
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
来自:
Vue-牛客面经八股
难度:
14条回答
98收藏
395浏览
热门推荐
相关试题
图片懒加载在 Vue 项目中的通用...
评论
(0)
来自
Vue-牛客面经八股
nextTick 的作用、实现思路...
评论
(4)
来自
Vue-牛客面经八股
keep-alive 的缓存策略、...
评论
(2)
来自
Vue-牛客面经八股
讲讲 Vue3 响应式系统中的依赖...
评论
(2)
来自
Vue-牛客面经八股
Vue 项目跨页面传参与持久化的常...
评论
(0)
来自
Vue-牛客面经八股
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题