网站首页 > 博客文章 正文
进入2020年,离vue3.0正式版发布的时间越来越近了。今天,借助尤雨溪大大提前发布的vue3.0源码,老K为大家整理一下vue3.0和vue2.0的区别。
vue3的变化可以总结为以下几点:
- 更小
- 更快
- 加强typescript支持
- Api一致性
- 提高可维护能力
- 开放更多底层功能
其中前三点是最主要的变化。
更小:
vue2采用面向对象编程的思想,vue3则采用函数式编程的思想。
vue2源码中代码是这样组织的:
function vue(){...}
vue.prototype.init = ...
vue3源码中是这样组织的:
//监听方法:
function watch(){...}
//渲染方法:
function render(){...}
原因:充分利用函数式编程组合大于继承的优势,采用函数式编程更利于逻辑功能的复用,webpack打包时更有利于tree-shaking,更利于代码的压缩,更利于返回值类型校验,压缩后的文件体积更小。
更快:
vue3修改了虚拟dom的算法(即diff算法 - 比对虚拟dom有没有变化)
vue2需要diff所有的虚拟dom节点,而vue3参考了SVELTE框架的思想,先分层次-然后找不变化的层-针对变化的层进行diff,更新速度不会再受template大小的影响,而是仅由可变的内容决定。经过尤雨溪自己的测试,大概有6倍的速度提升。
加强typescript支持:
vue3的源码开始采用了ts进行编写,给开发者也提供了支持ts的开发模式。
Api一致性
vue3最开始的版本可以完美兼容vue2的api。
提高可维护能力
从源码的层面上提供了更多的可维护能力。
开放更多底层功能
把更多的底层功能开放出来,比如render、依赖收集功能,我们可以更好的进行自定义化开发,可以写更多的高阶组件。
最后我们再谈谈两者在数据双向绑定方面的区别。
数据双向绑定:
关于数据双向绑定的实现,vue2 采用了defineProperty,而vue3则采用了proxy。
优点:
- 使用proxy不污染源对象,会返回一个新对象,defineProperty是注入型的,会破坏源对象
- 使用proxy只需要监听整个源对象的属性,不需要循环使用Object.defineProperty监听对象的属性
- 使用proxy可以获取到对象属性的更多参数,使用defineProperty只能获取到监听属性的新值newvalue
/* vue2.0*/
var a = { b:123, c:444};
Object.defineProperty(a,'b',{
set: function(newvalue){
console.log('i am be set')
}
}) //只能获取到newvalue这个参数
/* vue3.0 */
var a={ b:123, c:444};
var newa = new Proxy(a,{
set:function(target,key,newvalue){
console.log(target,key,newvalue)
}
}) //可以获取到target,key,newvalue三个参数
希望整理的这些内容对大家有所帮助。最后老K提前祝大家春节快乐!!!
本文为原创内容,若转载请注明出处,转发感激不尽。
猜你喜欢
- 2025-01-04 vue3+ts+vite怎么配置es6转es5?
- 2025-01-04 Vue Demi是如何让你的库同时支持Vue2和Vue3的
- 2025-01-04 Vue3.3 + TS4 ,自主打造媲美 ElementPlus 的组件库(超清完结)
- 2025-01-04 在vue3中更丝滑的去使用tsx
- 2025-01-04 用vue3.2+ts+element搭建了个后台框架,却没有项目给我做
- 2025-01-04 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
- 2025-01-04 不同vue版本下如何分环境打包
- 2025-01-04 Vue vben admin - 基于 Vue3 / Ant Design Vue 的高颜值管理后台UI框架
- 2025-01-04 使用Vite和TypeScript带你从零打造一个属于自己的Vue3组件库
- 2025-01-04 只会Vue的我,上班第一天就要我写React+TS,是种什么样的体验?
你 发表评论:
欢迎- 最近发表
-
- 告别频繁登录!Nuxt3 + TS + Vue3实战:双Token无感刷新方案全解析
- SpringBoot实现单点登录(SSO)的4种方案
- 随机密聊 匿名聊天室程序源码(随机匿名聊天在线)
- SpringBoot大文件上传卡死?分块切割术搞定GB级传输,速度飙升!
- Java 微服务从源码实战开始 | Gitee 项目推荐
- 轻量级埋点sdk搭建,便捷更全面(埋点sdk是什么)
- Spring Boot 实现文件秒传功能(springboot上传文件到指定文件夹)
- 项目中不用redis分布式锁,怎么防止用户重复提交?
- SpringBoot项目日志打印traceId生成
- 如何实现PC端网站扫码登录操作?(网页 扫码)
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)