vue3和vue2(Vue3对比Vue2的优点总结)
vue3和vue2
Vue3对比Vue2的优点总结目录
- 1.为什么要有vue3
- 2.vue3的优点
- 3.响应式原理的不同
- 4.生命周期的不同
- 5.默认项目目录结构的不同
- 6.vue3对全局API的优化
- 7.使用Proxy替代了defineProperty
- 8.更多资料
我们使用vue2常常会遇到一些体验不太好的地方,比如:
- 随着功能的增长,需求的增加,复杂组件的代码越来越难以维护,逻辑混乱,虽然vue2也有一些复用的方法,但是都存在一定的弊端,比如我们常常用的Mixin,特别容易发生命名冲突,暴露出来的变量意图不是很明显,重用到其他组件容易冲突。
- vue2对于typeScript的支持非常有限,没有考虑到ts的集成。
vue3的出现就是为了解决vue2的弊端,其composition API很好的解决了逻辑复用的问题,而且vue3源码就是用ts写的,对ts的支持非常好。我们在开发项目过程中可以使用ts的加持,使代码更加健壮。
2.vue3的优点- vue3支持vue2的大多数特性,实现对vue2的兼容
- vue3对比vue2具有明显的性能提升
- 打包大小减少41%
- 初次渲染快55%,更新快133%
- 内存使用减少54%
- vue3具有的composition API实现逻辑模块化和重用
- 增加了新特性,如Teleport组件,全局API的修改和优化等
Vue2.x实现双向数据绑定原理,是通过es5的 Object.defineProperty,根据具体的key去读取和修改。其中的setter方法来实现数据劫持的,getter实现数据的修改。但是必须先知道想要拦截和修改的key是什么,所以vue2对于新增的属性无能为力,比如无法监听属性的添加和删除、数组索引和长度的变更,vue2的解决方法是使用Vue.set(object, propertyName, value) 等方法向嵌套对象添加响应式。
Vue3.x使用了ES2015的更快的原生proxy 替代 Object.defineProperty。Proxy可以理解成,在对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy可以直接监听对象而非属性,并返回一个新对象,具有更好的响应式支持
4.生命周期的不同beforeCreate -> 请使用 setup()
created -> 请使用 setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
errorCaptured -> onErrorCaptured
如果要想在页面中使用生命周期函数,以往vue2的操作是直接在页面中写入生命周期,而vue3是需要去引用的,这就是为什么3能够将代码压缩到更低的原因
5.默认项目目录结构的不同vue3移除了配置文件目录,config 和 build 文件夹,移除了 static 文件夹,新增 public 文件夹,并且 index.html 移动到 public 中,在 src 文件夹中新增了 views 文件夹,用于分类视图组件和公共组件
6.vue3对全局API的优化在 Vue3 中,全局和内部 API 都经过了重构,并考虑到了 tree-shaking 的支持。因此,全局 API现在只能作为 ES 模块构建的命名导出进行访问。
import { nextTick } from 'vue' nextTick(() => { // 一些和DOM有关的东西 })
入口文件
// vue2写法 // vue2全局配置的修改,会修改Vue对象的属性 // 在不同的app中,共享一份有着不同配置的Vue对象,也变得非常困难 import Vue from 'vue' import App from './App.vue' Vue.config.xx=xx Vue.use(...) Vue.mixin(...) new Vue({ render:h=>h(app) }).$mount('#app') // vue3写法 import { createApp } from 'vue' import App from './App.vue' const app = createApp(APP) // 创建一个app实例 app.config.xx=xx // 在实例上修改配置,不会发生冲突 app.use(...) app.mixin(...) app.mount('#app')
Proxy 相比于 defineProperty 的优势
Object.defineProperty() 的问题主要有三个:
- 不能监听数组的变化
- 必须遍历对象的每个属性
- 必须深层遍历嵌套的对象
Proxy 在 ES2015 规范中被正式加入,它有以下几个特点:
- 针对对象:针对整个对象,而不是对象的某个属性,所以也就不需要对 keys 进行遍历。这解决了上述 Object.defineProperty() 第二个问题
- 支持数组:Proxy 不需要对数组的方法进行重载,省去了众多 hack,减少代码量等于减少了维护成本,而且标准的就是最好的。
除了上述两点之外,Proxy 还拥有以下优势:
- Proxy 的第二个参数可以有 13 种拦截方法,这比起 Object.defineProperty() 要更加丰富
- Proxy 作为新标准受到浏览器厂商的重点关注和性能优化,相比之下 Object.defineProperty() 是一个已有的老方法。
vue3源码
vue3官网
以上就是Vue3对比Vue2的优点总结的详细内容,更多关于Vue3对比Vue2的优点的资料请关注开心学习网其它相关文章!
- vue3兼容的插件多吗(关于vue3编写挂载DOM的插件问题)
- vue的watch用法(Vue3中watch的用法与最佳实践指南)
- 详解Vue3中Teleport的使用(详解Vue3中Teleport的使用)
- vue3.0路线图(Vue3.0 自己实现放大镜效果案例讲解)
- vue3.0零基础入门(快速掌握Vue3.0中如何上手Vuex状态管理)
- vue前端搜索功能如何实现(使用Vue3+Vant组件实现App搜索历史记录功能示例代码)
- vue3.0 自定义组件(Vue 3.0自定义指令的使用入门)
- vue 路由的两种模式(Vue3使用路由VueRouter4的简单示例)
- vue控制div滚动条(vue3实现CSS无限无缝滚动效果)
- vue3 动态生成组件(如何在vue3.0+中使用tinymce及实现多图上传文件上传公式编辑功能)
- vue-router起步教程交流(vue3使用vue-router的完整步骤记录)
- vue3函数详解(手把手教你用vue3开发一个打砖块小游戏)
- vue3和vue2(Vue3对比Vue2的优点总结)
- vue3.0安装element(vue3+electron12+dll开发客户端配置详解)
- vue将弹框抽离成组件(vue3 可拖动的左右面板分割组件实现)
- vue动态路由实现权限控制(vue2/vue3路由权限管理的方法实例)
- 三千年第一美女鞠婧祎出演白素贞pk杨紫,颜值胜赵雅芝王祖贤(三千年第一美女鞠婧祎出演白素贞pk杨紫)
- 成都轨道交通13号线一期工程最新进展(成都轨道交通13号线一期工程最新进展)
- 越南没事(越南没事情做)
- 重庆旅游攻略(重庆旅游3-4天攻略最佳线路)
- 周杰伦演唱会门票(周杰伦演唱会门票多少钱一张2023)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
热门推荐
- ddos防御实例(浅析云主机防ddos的基础防御)
- idea配置mysql最大连接数(IDEA连接不上MySQL端口号占用的解决)
- MVC扩展HtmlHelper实现CheckBoxList
- Request获取URL的各种信息
- docker容器的使用过程(详解docker容器的层的概念)
- 怎么修改dede标签内容(用数据库批量修改替换dedecms文章标题和内容的步骤分享[图文])
- mysql安装时服务无法启动(MySQL 实例无法启动的问题分析及解决)
- cookie httponly属性
- 网络连接云主机(如何远程连接云主机?)
- 如何搭建个人网盘dedecms(linux和windows主机实现dedecms伪静态)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9