Vue 2 即将成为过去
创始人
2024-05-10 04:45:43
0

自从 2020 年 9 月 18 日 Vue 3 正式发布以来,已经有两年多时间了,终于在 2022 年 2 月 7 日 Vue 作者发布了一则消息:Vue 3 将成为新的默认版本。与此同时,Vue 相关官方周边的核心库 latest 发布标签将指向其 Vue 3 的兼容版本。

另外,随着 Vue 2.7 的发布,Vue 2.7 已经成为 Vue 2.x 的最终次要版本。在这个版本之后,Vue 2 进入了 LTS(长期支持),并且将不再接收新功能。这意味着 Vue 2.x 将在 2023 年底结束其生命周期

可以预见:在不久的将来,Vue 2.x 将会逐步淡出江湖,Vue 3 将会成为代替 Vue 2 的主流框架。

Vue 3 作为一个全球最顶尖的前端框架之一,整体的思想理念、程序设计、细节的取舍、API 设计、项目的工程考量都是非常优秀的!通过对源码的阅读,不仅仅可以让我们快速建立起对 Vue 3 运行机制的深入了解,还可以从中学习到很多程序设计的宝贵经验和架构思想!

所以,让我们快人一步,现在就开始对 Vue 3 的深耕,去学习一下 Vue 3 的核心技术实现原理,以及一些相对于 Vue 2 的改变之处。

全面拥抱 Vue 3

Vue 3 整体的设计相对于 Vue 2.x 有着不小的变化,在开启 Vue 3 技术揭秘的旅途之前,我们先着重介绍几个相对于 Vue 2.x 而言较大的几个变化,这里的介绍不会深入到源码的细节,旨在帮助小伙伴们快速建立起对 Vue 3 的一些前置认知,更多的细节变化和设计原理我们将在接下来的课程中为大家渐进式地揭开面纱!

1. 源码组织上的变化

在 Vue 2 中,所有的源码都存在在 src 目录下:

Vue 3 相对于 Vue 2 使用 monorepo 的方式进行包管理,使用 monorepo 的管理方式,使得 Vue 3 源码模块职责显得特别地清晰明了,每个包独立负责一块核心功能的实现,方便开发和测试。如下图:

比如,compiler-core 专职负责与平台无关层的渲染器底层,对外提供统一调用函数,内部通过完整的测试用例保障功能的稳定性。而 compiler-dom 和 compiler-ssr 则依托于 compiler-core 分别实现浏览器和服务端侧的渲染器上层逻辑,模块核心职责清晰明了,提高了整体程序运行的健壮性!

2. 引入 Composition API

在 Vue 2.7 之前,我们去开发 Vue 应用,都是通过 datacomputedmethods……这样的选项分类的方式来实现一个组件的开发。其实这样对于没有大量状态逻辑维护、复用的组件来说,是比较直观的组织方式,但是一旦遇到需要大量维护、复用状态的组件来说,这无疑增加了维护的成本和风险。

组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。通过下图我们可以清晰地看出来二者的区别

但 Composition API 也并不是“银弹”,它也有自己适合的场景,所以 Vue 3 也是在实现层面做到了兼容 Options API 的写法。相对而言,Composition API 更适用于大型的项目,因为大型项目可能会产生大量状态逻辑的维护,甚至跨组件的逻辑复用;而对于中小型项目来说,Options API 可以在你写代码时减少思考组织状态逻辑的方式,也是一种不错的选择。

3. 运作机制的变化

熟悉 Vue 2 源码的同学大致清楚 Vue 2的核心运作机制可以抽象为下图所示的样子:

Vue 3 则在底层实现中,摒弃了 Vue 2 的部分实现,采用全新的响应式模型进行重写。这里我根据 Vue 3 的运行机制,也简单画了一张 Vue 3 的宏观草图,如下所示:

可以粗略地看到:

  • 首先,之前通过 new Vue() 来创建 Vue 对象的方式已经变成了 createApp
  • 其次,在响应式部分也由原来的 Object.defineProperty 改成了现在的 Proxy API 实现;
  • 另外,针对响应式依赖收集的内容,在 Vue 2.x 版本中是收集了 Watcher,而到了 Vue 3 中则成了 effect

除了上面所说的这些变化外,Vue 3 不管是在编译时、还是在运行时都做了大量的性能优化。例如,在编译时,Vue 3 通过标记 /*#__PURE__*/ 来为打包工具提供良好的 Tree-Shaking机制,通过 静态提升 机制,避免了大量静态节点的重复渲染执行;在运行时,又通过批量队列更新机制优化了更新性能,通过 PatchFlags 和 dynamicChildren 进行了 diff 的靶向更新……

上面的内容有些不理解了?没关系,等等,这里先卖个关子。相信你一定可以在学习本小册的过程中,得到你的答案!

开启小册的前置准备

如果你已经迫不及待地想赶紧开始学习 Vue 3 的设计核心,请稍安勿躁,我们还需要做一些准备工作,以方便你在后续的学习中更容易理解文中的内容。

首先,本小册中所有关于 Vue 的源码所依托的版本是 3.2.45。然后你也可以去 GitHub 上 clone 下来 Vue 3 源码。

clone 下来后,我们可以简单看一下项目的目录结构:

├── packages              
│   ├── compiler-core     # 与平台无关的编译器实现的核心函数包
│   ├── compiler-dom      # 浏览器相关的编译器上层内容
│   ├── compiler-sfc      # 单文件组件的编译器
│   ├── compiler-ssr      # 服务端渲染相关的编译器实现
│   ├── global.d.ts       # ts 相关一些声明文件
│   ├── reactivity        # 响应式核心包
│   ├── runtime-core      # 与平台无关的渲染器相关的核心包
│   ├── runtime-dom       # 浏览器相关的渲染器部分
│   ├── runtime-test      # 渲染器测试相关代码
│   ├── server-renderer   # 服务端渲染相关的包
│   ├── sfc-playground    # 单文件组件演练场 
│   ├── shared            # 工具库相关
│   ├── size-check        # 检测代码体积相关
│   ├── template-explorer # 演示模板编译成渲染函数相关的包
│   └── vue               # 包含编译时和运行时的发布包

本小册介绍的核心内容主要分布在 compiler-corecompiler-domreactivity、 runtime-coreruntime-dom 这几个包中,这些也是 Vue 的核心

另外,在阅读过程中,你也可以一边看、一边自己调试,Vue 为我们提供了很多开发使用的示例,我们可以通过下面的命令来运行它:

$ npm run dev # 开启 vue dev 环境 watch
$ npm run serve # 启动 example 示例的服务器

接着,我们只需要访问 packages/vue/examples/** 中的示例就可以在线调试 Vue 代码了。

最后,让我们一起进入 Vue 3 的世界,探索其中的奥秘吧!

Vue 3 技术揭秘 - muwoo - 掘金小册渐进式揭秘 Vue 3 源码的设计过程和架构思想。「Vue 3 技术揭秘」由muwoo撰写,881人购买https://s.juejin.cn/ds/kyJYLn1/

相关内容

热门资讯

安卓系统计划软件推荐,精选计划... 你有没有发现,手机里的安卓系统越来越智能了?这不,最近我可是挖到了一些超棒的安卓计划软件,它们不仅能...
收钱吧安卓系统插件,便捷支付新... 你有没有发现,现在的生活越来越离不开手机了?手机里装满了各种应用,而今天我要跟你聊聊一个特别实用的工...
鸿蒙系统是否还属于安卓,独立于... 你有没有想过,那个在我们手机上默默无闻的鸿蒙系统,它到底是不是安卓的“亲戚”呢?这个问题,估计不少手...
安卓系统手机用什么钱包,轻松管... 你有没有想过,你的安卓系统手机里装了那么多应用,但最离不开的,可能就是那个小小的钱包了。没错,就是那...
安卓系统能玩部落冲突吗,部落冲... 你有没有想过,安卓系统上的手机,是不是也能玩那款风靡全球的《部落冲突》呢?这款游戏自从推出以来,就吸...
智能机器人安卓系统,引领未来智... 你知道吗?在科技飞速发展的今天,智能机器人已经不再是科幻电影里的专属了。它们正悄悄地走进我们的生活,...
华为win10系统改装安卓系统... 你有没有想过,你的华为笔记本电脑里的Windows 10系统,能不能来个华丽变身,变成安卓系统呢?这...
旧电脑上安什么安卓系统,适配不... 你那台旧电脑是不是已经闲置好久了?别让它默默无闻地躺在角落里,给它来个华丽变身吧!今天,就让我来告诉...
安卓app语言跟随系统,随系统... 你知道吗?在手机世界里,有一个神奇的小功能,它就像你的贴身翻译官,无论你走到哪里,都能帮你轻松应对各...
惠城安卓系统降级在哪,揭秘降级... 你有没有遇到过手机系统升级后,发现新系统让你头疼不已,想回到那个熟悉的安卓系统呢?别急,今天就来告诉...
阿里云系统转安卓,揭秘安卓平台... 你知道吗?最近有个大动作在互联网圈里引起了不小的波澜,那就是阿里云系统竟然要转战安卓阵营了!这可不是...
安卓系统有最美壁纸么,探寻最美... 哦,亲爱的安卓用户,你是否曾在某个午后,百无聊赖地翻看着手机,突然被那一张张壁纸惊艳了眼眸?是的,我...
安卓系统采用Linux操作系统... 你知道吗?安卓系统,这个在我们手机上无处不在的小家伙,它的心脏竟然是Linux操作系统内核!是不是觉...
安卓原生平板通用系统,探索安卓... 你有没有发现,现在市面上平板电脑的品牌和型号真是五花八门,让人挑花了眼?不过,你知道吗?在众多安卓平...
小米1系统是安卓几,搭载安卓几... 你有没有想过,你的小米手机里那个熟悉的系统,其实是基于安卓的哦!没错,就是那个全球最流行的手机操作系...
可以安装安卓系统的相机,智能摄... 你有没有想过,一台相机不仅能拍出美美的照片,还能像智能手机一样,玩转各种应用?没错,现在市面上就有这...
安卓系统gps定位不准,安卓G... 你是不是也遇到过这种情况?手机里的安卓系统GPS定位总是不准,让人头疼不已。有时候,你明明就在家附近...
电信机顶盒装安卓系统,开启智能... 你有没有想过,家里的电信机顶盒其实也可以装上安卓系统呢?听起来是不是有点不可思议?别急,让我带你一步...
安卓系统可以做苹果桌面,打造个... 你知道吗?现在科技的发展真是让人眼花缭乱,竟然有人想出了安卓系统可以做苹果桌面的神奇想法!是不是觉得...
安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...