Vue 和 React 差异
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
- 调度选择优先级比较高的任务, 小顶堆
- 协调 计算要执行的任务 → 执行任务 计算系统空闲时间是否足够
- 提交 根据提交的内容修改 ⇒ render
React v17
在 React V17 中, React 不会再将事件处理添加到 document 上,而是将事件处理添加到渲染 React 树的根 DOM 容器中.也就是事件委托
Vue
Vue 是模板代码
运行时编译(runtime)
Vue 的 template 模板只有自己的编译器才能编译
编译时优化
-
HTML 转化成 AST(抽象语法树)
使用了大量正则进行标签匹配,优化静态节点做上标记,提取 if,@,v-等方法
通过一个栈,进行标签拼接
-
options.optimize 进行静态节点优化
在静态节点标记 Ast static
静态节点创建提升 VNode __static__
-
优化后的 AST 转换成代码
运行时优化
vue 双向数据绑定
vue1 每一个动态数据对应一个 watcher 占用内存大
vue2 Watcher 是组件级的 ⇒ 所以需要 dom diff 也是组件级
更新性能
简单来说,在 React 应用中,当某个组件的状态发生变化时,它会以该组件为根,重新渲染整个组件子树。
当然我们可以使用 PureComponent,或是手动实现 shouldComponentUpdate 方法,来规避不必要的渲染。
在 Vue 应用中,组件的依赖是在渲染过程中自动追踪的,因此系统能精确知晓哪个组件需要被重渲染。
从理论上看,Vue 的渲染更新机制更加细粒度,也更加精确。