vue和react有什么不同

120 阅读4分钟

一、说一下Vue和React的区别

一、架构不同

1. MVC

首先MVC指的是Model-View-Controller,分别代表着模型层、视图层、控制器。

  • Model(模型层),主要管理的是业务模型的数据和处理数据的逻辑。
  • View(视图层)主要是接收用户的交互请求并展示数据信息给用户。
  • Controller(控制器层)主要担任的是Model和View之间的桥梁,用于控制程序的流程。

2. MVVM

MVVM架构指的是Model-View-ViewMode,分别代表

  • M 表示模型层(存储数据)
  • V 表示视图层(显示数据)
  • VM 表示视图模型控制层(Vue 框架自带,开发时无需关注具体实现)

二、核心思想不同

Vue

Vue的核心思想是尽可能的降低前端开发的门槛,双向数据流

React

React的核心思想是声明式渲染和组件化、单向数据流,React既不属于MVC也不属于MVVM架构。

单向数据

单向数据流指只能从一个方向来修改状态。

Model 中的 data 发生变化的时候会单向修改 View 中的值,而 View 中的值发生变化的时候,Model 不会感知。实际应用就是 v-bind 单向数据。

双向数据流

在双向数据流中,Model(可以理解为状态的集合) 中可以修改自己或其他Model的状态, 用户的操作(如在输入框中输入内容)也可以修改状态。(双向数据流也可以叫双向数据绑定)

Diff算法不同

Diff算法是一种对比算法,主要是对比旧的虚拟DOM和新的虚拟DOM,找出发生更改的节点,并只更新这些接地那,而不更新未发生变化的节点,从而准确的更新DOM,减少操作真实DOM的次数,提高性能。

Vue

双端对比算法

React

React 不能通过双端对比进行 Diff 算法优化是因为目前 Fiber 上没有设置反向链表,

二、Vue 和 React 相似的地方

声明式是什么意思?

  • 命令式指的是通过DOM操作一步步把网页变成想要的样子
  • 声明式则是只需要通过状态去形容最后的网页长什么样子即可。

组件化是什么意思?

  • 组件化指的是尽可能的将页面拆分成一个个较小的、可以复用的组件,这样让我们的代码更加方便组织和管理,并且拓展性页更强。

三、为什么Vue中不需要使用Fiber

  1. 首先时间分片是为了解决 CPU 进行大量计算的问题,因为 React 本身架构的问题,在默认的情况下更新会进行过多的计算,就算使用 React 提供的性能优化 API,进行设置,也会因为开发者本身的问题,依然可能存在过多计算的问题。
  1. 而 Vue 通过响应式依赖跟踪,在默认的情况下可以做到只进行组件树级别的更新计算,而默认下 React 是做不到的(据说 React 已经在进行这方面的优化工作了),再者 Vue 是通过 template 进行编译的,可以在编译的时候进行非常好的性能优化,比如对静态节点进行静态节点提升的优化处理,而通过 JSX 进行编译的 React 是做不到的。
  1. React 为了解决更新的时候进行过多计算的问题引入了时间分片,但同时又带来了额外的计算开销,就是任务协调的计算,虽然 React 也使用最小堆等的算法进行优化,但相对 Vue 还是多了额外的性能开销,因为 Vue 没有时间分片,所以没有这方面的性能担忧。
  1. 根据研究表明,人类的肉眼对 100 毫秒以内的时间并不敏感,所以时间分片只对于处理超过 100 毫秒以上的计算才有很好的收益,而 Vue 的更新计算是很少出现 100 毫秒以上的计算的,所以 Vue 引入时间分片的收益并不划算