背景
最近看了点 vue/react 对比的文章,在这边试图总结一下,大家凑合看看吧,欢迎交流
不同的理念
Vue.js 和 React 之间的主要区别之一是它们如何称呼自己。
-
React 把自己描述为 “一个用于构建用户界面的JavaScript库”,而 Vue.js 则把自己描述为“渐进式JavaScript框架”
-
React 是一个库,Vue.js 是一个框架。我认为这是在很多方面他们处理方式不同的原因。
从历史上看,框架在提供和要求方面更全面、更详尽,
而库则更简洁、功能更少,但它们所专注的事情却做得非常好。
官方支持的相关库
你看 vue有官方路由库vue-router,状态管理库vuex,这些库在 Vue.js 文档页面中明确提到,它们是在 Vue.js 核心中开发和维护的。
官方文档
不得不说 vue的官方文档贴心很多,从快速上手,到如何逻辑复用,如何测试,甚至还有最佳实践(如何打包部署,性能优化等),响应式原理…,我觉得真的做到面面俱到
再看 react 官方文档,可能更加专注于 UI= F(state)的初心,其他方面并未留下多余笔墨,真的呼应了“一个用于构建用户界面的JavaScript库”理念
心智负担,开发易用性
易用性
这个不用多说了,
从易用性来说,用过的都知道,Vue天然支持的 样式,类的动态绑定;指令修饰符, v-model 语法糖 等等
这些 都让 vue 比 react 的入门门槛低, 开发体验 “傻瓜”了不少
心智负担
- 从心智负担来说:
比如 react 的 hooks vs Vue Composition API
-
Hooks不能在条件语句中声明
-
Hooks必须显式指明依赖
而 Vue Composition API 是没有这种限制的
useEffect
其中useEffect的执行时机囊括了如下3个生命周期函数,使得 useEffect API上手难度相对提高
-
componentDidMount
-
componentDidUpdate
-
componentWillUnmount
而vue 并没有放弃 生命周期函数(onMounted,onUpdated,onUnmounted)
JSX 和 template 的优缺点
JSX 优缺点 : 优点是js灵活,缺点是太灵活,语法过于复杂,引擎难以理解,无法预判用户的意图,从而难以优化性能
Template优缺点 : 重点是有约束,就代表,编译的时候能更清晰的明白它的意图,也就更方便地做编译优化,比如做静态标记等。
原理层分析:
更新粒度
React的更新粒度
自顶向下的进行递归更新的,也就是说,React 中假如 ChildComponent 里还有十层嵌套子元素,那么所有层次都会递归的重新render(在不进行手动优化的情况下),这是性能上的灾难
Vue的更新粒度
Vue 有收集依赖的这套精确更新体系,每个组件都有自己的渲染 watcher,它掌管了当前组件的视图更新,但是并不会掌管 ChildComponent 的更新。
diff 优化手段
vue
Vue的虚拟node 是以数组结构存储,可以使用 双端diff,排除数组相同的前、后缀节点
react
react 性能的短板
-
一个是由于React的Fiber架构使用链表实现,无法进行两端比较,所以diff 性能不高
-
一个是react没有响应式 细粒度的更新机制,所以对于局部更新场景也不占优势
所以react创造了Fiber,创造了可以被中断的diff,这样可以作为short task ,作为时间切片, 短耗时意味着浏览器有更多空闲时间重排、重绘,更不易卡顿
题外话:react,vue,谁会淘汰谁?
react,vue这种声明式框架,注定取代 jquery 这种命令式框架,形成自己的DSL 标准,
谁也不会取代谁,但是后面可能会有新的范式取代这种声明式框架,到时候可能他俩一起被淘汰
说了这么多,我们还是需要接受现实:用React的公司多~