VueReact 差异

Vue 和 React 可以说是用两个用户的角度去设计的框架,
Vue 想要为程序员群体提供一个性能上过的去,开发体验良好的使用框架
而 React 更专注于 UI 对于用户的使用体验,无论是 Fiber, 优先级设置,idleCallback 的引入都是为了这一目的,但是这也为程序员带来了一些学习上过的负担,也给程序员带来了技术选择的自由

React

编译时优化

functinon react(){
  return <div></div>
}
 
===>
function react(){
    return React.creatElement(div,'')
}

因为 js 是一种运行时的动态语言,所以无法做编译时优化

运行时优化

触发渲染:this.setState,props,事件啊

触发后进行全局 DOM diff,所以将 DOM 树拆分成一个个 fiber

  1. 调度选择优先级比较高的任务, 小顶堆
  2. 协调 计算要执行的任务 执行任务 计算系统空闲时间是否足够
  3. 提交 根据提交的内容修改 render

React v17

在 React V17 中, React 不会再将事件处理添加到 document 上,而是将事件处理添加到渲染 React 树的根 DOM 容器中.也就是事件委托

Vue

Vue 是模板代码

运行时编译(runtime)

Vue 的 template 模板只有自己的编译器才能编译

编译时优化

  1. HTML 转化成 AST(抽象语法树)

    使用了大量正则进行标签匹配,优化静态节点做上标记,提取 if,@,v-等方法

    通过一个栈,进行标签拼接

  2. options.optimize 进行静态节点优化

    在静态节点标记 Ast static

    静态节点创建提升 VNode __static__

  3. 优化后的 AST 转换成代码

运行时优化

vue 双向数据绑定

vue1 每一个动态数据对应一个 watcher 占用内存大

vue2 Watcher 是组件级的 所以需要 dom diff 也是组件级

更新性能

简单来说,在 React 应用中,当某个组件的状态发生变化时,它会以该组件为根,重新渲染整个组件子树。

当然我们可以使用 PureComponent,或是手动实现 shouldComponentUpdate 方法,来规避不必要的渲染。

在 Vue 应用中,组件的依赖是在渲染过程中自动追踪的,因此系统能精确知晓哪个组件需要被重渲染。

从理论上看,Vue 的渲染更新机制更加细粒度,也更加精确