vue.js是干什么的?各个版本有什么区别?

vue.js 是一个开源的渐进式 javascript 框架。

特点

轻量级框架

相对于 react 和 angular,vue.js 更简单、易于理解和上手。

数据双向绑定

采用声明式编程,通过更改数据自动触发视图更新,与 react 类似。

指令

提供了许多内置指令,操作页面方便。

组件化

支持组件化开发和封装可复用代码,与 react 和 angular 类似。

前端路由

支持前端路由、构建单页面应用(Single Page Application)、服务器端渲染(Server-Side Rendering)应用,与 react 和 angular 类似。

单向数据流

组件状态管理采用了单向数据流,与 react 类似。

vue.js 2 的缺点

对 typescript 的支持不友好

vue.js 2 对 typescript 的支持不友好,对构建大型项目不利

mixin 混入缺陷

vue.js 2 使用 mixin 混入来抽取相同代码逻辑,当一个组件有多个 mixin 时,代码会变得难以阅读,因为不知道哪个属性来自哪个 mixin,多个 mixin 中的属性容易发生冲突。

响应式系统缺陷

vue.js 2 采用 Object.definedProperty 来进行数据劫持,这种方式存在缺陷,无法劫持和监听对象添加或删除属性时的变化,无法遍历对象的每个属性,包括对于对象属性的对象进行深度遍历,导致性能低下。

逻辑零散

vue.js 2 使用 Options API 编写组件,当实现某个功能时,对应的代码逻辑会被拆分到各个属性中,一旦组件变得复杂,逻辑就会变得零散。

vue.js 3 的变化

monorepo 源码管理

vue.js 3 对项目管理进行了重大重构,采用 monorepo 方式来管理。

mono 是单个的意思,repo 是 repository 的简写,monorepo 的意思是将许多项目的代码存储在一个 repository 中。

vue.js 2.6.14

vue.js 2 将所有源代码都写在 src 目录下,按照不同功能划分成多个文件夹,compiler(模板编译相关)、core(核心运行时)

vue.js 3.2.23

vue.js 3 将不同模板拆分到了 packages 目录下的子目录中,每个模块可以看作一个独立的项目,具有自己的类型定义、api、测试用例等。

将每个模块划分为独立的项目,不仅让整个结构更清晰,容易让开发者阅读、理解和修改模块代码,提高了代码的可维护性和扩展性。

采用 typescript 进行重构

vue.js 2 整个项目使用 flow 进行类型检测,flow 在很多复杂场景中对类型的支持不是非常友好。

从 vue.js 3 开始,项目全面采用 typescript 进行重构。

采用 proxy 进行数据劫持

vue.js 2 采用 Object.definedProperty 来进行数据劫持,这种方式存在缺陷,给对象添加或者删除属性时,无法进行劫持和监听。

为了解决此问题,提供了专门的 api,例如 vm.set 和 vm.delete。

vue.js 3 采用 proxy 实现数据劫持。给对象添加或者删除属性时,proxy 可以劫持和监听到,因为 proxy 劫持的是整个对象,劫持的类型比 Object.definedProperty 更丰富,不仅可以劫持 set、get,还可以劫持 in、delete 操作。

编译阶段优化

vue.js 3 在编译阶段进行了多项优化,用于提高应用程序和性能和效率。

生成 block tree

在编译阶段,vue.js 3 对静态模板进行分析,生成 block tree 更好进行性能优化。

block tree 是 vue.js 3 中的新概念,是一个基于模板静态分析的数据结构,用于描述模板和子模板之间的关系,从而提高渲染效率。

slot 编译优化

vue.js 3 对 slot 的生成进行优化,对于非动态 slot 中属性更新,只会触发子组件更新,减少更新次数和计算量。

diff 算法优化

相对于 vue.js 2,vue.js 3 在 diff 算法上进行了多项优化,采用更高效的算法和数据结构,减少了更新操作的次数和计算量,提高应用程序的性能。

Composition API

vue.js 2 使用 Options API 编写组件,其中包含 data、props、methods、computed 和生命周期等选项。

在实现某个功能时,对应的代码逻辑会被拆分到各个属性中,如果组件变得更大或更复杂,逻辑就会变得非常分散,需要在多个选项之间寻找,不利于后期维护和扩展。

vue.js 3 主要使用 Composition API 编写组件,兼容 Options API 。

Composition API 包含 ref、reactive、computed、watchEffect、watch 等函数,Composition API 可以将相关的代码放在一起进行处理,封装成一个 hook 函数来支持数据的响应式,避免 mixin 混入带来的缺陷。这样可以方便实现在多个组件之间共享逻辑,提高代码可读性和可维护性。

移除一些非必要的 api

vue.js 3 除了 vue 实例中的 on、off 和 $once API,还移除了一些特性,比如 filter 和内联模板等。

各个版本发布时间线

第一个版本是 0.6.0

https://github.com/vuejs/vue/releases/tag/0.6.0

2013.12.08 发布

2.x 版本

https://v2.cn.vuejs.org/

https://github.com/vuejs/vue/releases/tag/v2.0.0

2016.10.01 发布

https://v2.cn.vuejs.org/eol/

最后版本为 2.7.16

3.x 版本

自 2022 年 2 月 7 日起,Vue 3 已成为 Vue 的默认版本。

https://github.com/vuejs/core

版本区别

https://zhuanlan.zhihu.com/p/389421424

https://developer.aliyun.com/article/891519

https://juejin.cn/post/7097938704744284197

https://www.jianshu.com/p/b6cfe5fe1151

相关推荐
被考核重击2 小时前
【无标题】
前端·javascript·vue.js
Glommer2 小时前
Akamai 逆向思路
javascript·爬虫·逆向
RJiazhen2 小时前
论前端第三方库的技术选型 —— 以 Jodit Editor 为例
前端·前端工程化
用户8168694747252 小时前
React 如何用 MessageChannel 模拟 requestIdleCallback
前端·react.js
izx8882 小时前
从 Buffer 到响应式流:Vue3 实现 AI 流式输出的完整实践
javascript·vue.js·人工智能
heyCHEEMS2 小时前
手搓 uniapp vue3 虚拟列表遇到的坑
前端
Duck不必2 小时前
紧急插播:CVSS 10.0 满分漏洞!你的 Next.js 项目可能正在裸奔
前端·next.js
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue在线考试管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
幸运小圣2 小时前
动态组件【vue3实战详解】
前端·javascript·vue.js·typescript