这个页面无疑是最难编写的,但我们认为它也是非常重要的。或许你曾遇到了一些问题并且已经用其他的框架解决了。你来这里的目的是看看 Vue 是否有更好的解决方案。这也是我们在此想要回答的。
客观来说,作为核心团队成员,显然我们会更偏爱 Vue,认为对于某些问题来讲用 Vue 解决会更好。如果没有这点信念,我们也就不会整天为此忙活了。但是在此,我们想尽可能地公平和准确地来描述一切。其他的框架也有显著的优点,例如 React 庞大的生态系统,或者像是 Knockout 对浏览器的支持覆盖到了 IE6。我们会尝试着把这些内容全部列出来。
我们也希望得到你的帮助,来使文档保持最新状态,因为 Javascript 的世界进步的太快。如果你注意到一个不准确或似乎不太正确的地方,请提交问题让我们知道。
ReactReact 和 Vue 有许多相似之处,它们都有:
使用 Virtual DOM
提供了响应式(Reactive)和组件化(Composable)的视图组件。
将注意力集中保持在核心库,伴随于此,有配套的路由和负责处理全局状态管理的库。
由于有着众多的相似处,我们会用更多的时间在这一块进行比较。这里我们不只保证技术内容的准确性,同时也兼顾了平衡的考量。我们需要指出 React 比 Vue 更好的地方,像是他们的生态系统和丰富的自定义渲染器。
React社区为我们准确进行平衡的考量提供了非常积极地帮助,特别感谢来自 React 团队的 Dan Abramov 。他非常慷慨的花费时间来贡献专业知识,帮助我们完善这篇文档,最后我们对最终结果都十分满意。
性能简介到目前为止,针对现实情况的测试中,Vue 的性能是优于 React 的。如果你对此表示怀疑,请继续阅读。我们会解释为什么会这样(并且会提供一个与 React 团队共同约定的比较基准)。
渲染性能在渲染用户界面的时候,DOM 的 *** 作成本是最高的,不幸的是没有库可以让这些原始 *** 作变得更快。 我们能做到的最好效果就是:
Minimize the number of necessary DOM mutations. Both React and Vue use virtual DOM abstractions to accomplish this and both implementations work about equally well.
Add as little overhead (pure Javascript computations) as possible on top of those DOM manipulations. This is an area where Vue and React differ.
The Javascript overhead is directly related to the mechanisms of computing the necessary DOM operations. Both Vue and React utilizes Virtual DOM to achieve that, but Vue's Virtual DOM implementation (a fork of snabbdom) is much lighter-weight and thus introduces less overhead than React's.
Vue 和 React 也提供功能性组件,这些组件因为都是没有声明,没有实例化的,因此会花费更少的开销。当这些都用于关键性能的场景时,Vue 将会更快。为了证明这点,我们建立了一个简单的参照项目,它负责渲染 10,000 个列表项 100 次。我们鼓励你基于此去尝试运行一下。然而在实际上,由于浏览器和硬件的差异甚至 Javascript 引擎的不同,结果都会相应有所不同。
如果你懒得去做,下面的数值是来自于一个 2014 年产的 MacBook Air 并在 Chrome 52 版本下运行所产生的。为了避免偶然性,每个参照项目都分别运行 20 次并取自最好的结果:
In React, when a component's state changes, it triggers the re-render of the entire component sub-tree, starting at that component as root.
To avoid unnecessary re-renders of child components, you need to implement shouldComponentUpdate everywhere and use immutable data structures. In Vue, a component's dependencies are automatically tracked during its render, so the system knows precisely which components actually need to re-render.
这意味着,未经优化的 Vue 相比未经优化的 React 要快的多。由于 Vue 改进过渲染性能,甚至全面优化过的 React 通常也会慢于开箱即用的 Vue。
开发中显然,在生产环境中的性能是至关重要的,目前为止我们所具体讨论的便是针对此环境。但开发过程中的表现也不容小视。不错的是用 Vue 和 React 开发大多数应用的速度都是足够快的。
当性能在生产中性能是直接与终端用户体验相关的更重要的指标时,表现在开发中仍然很重要,因为它是与开发相关经验
然而,假如你要开发一个对性能要求比较高的数据可视化或者动画的应用时,你需要了解到下面这点:在开发中,Vue 每秒最高处理 10 帧,而 React 每秒最高处理不到 1 帧。
这是由于 React 有大量的检查机制,这会让它提供许多有用的警告和错误提示信息。我们同样认为这些是很重要的,但是我们在实现这些检查时,也更加密切地关注了性能方面。
HTML & CSS在 React 中,它们都是 Javascript 编写的,听起来这十分简单和优雅。然而不幸的事实是,Javascript 内的 HTML 和 CSS 会产生很多痛点。在 Vue 中我们采用 Web 技术并在其上进行扩展。接下来将通过一些实例向你展示这意味的是什么。
JSX vs Templates在 React 中,所有的组件的渲染功能都依靠 JSX。JSX 是使用 XML 语法编写 Javascript 的一种语法糖。这有一个通过React社区审核过的例子:
render () { let { items } = this.props let children if ( items.length > 0 ) { children = (
-
{items.map( item =>
- {item.name} )}
No items found.
} return ( {children}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)