为什么要使用React、Vue这类前端框架

286 阅读5分钟

在下文讨论的所有的页面渲染场景,都是在浏览器环境下的由 react、vue 负责全部页面渲染的单页面应用的场景。

性能

先提一个问题:用前端框架对页面修改的性能更好还是用原生 JavaScript(包括 jQuery)性能更好?

这个问题可以这样回答:用原生一定性能更好。是的,修饰词是“一定”。但是,这个回答需要有个前提,是在使用原生时能精确地修改 DOM 节点,并且还要自己实现如批量更新等优化逻辑。这个前提容易实现吗?在真实的开发场景中,是很难的。有过原生或 jQuery 开发经历的同学可以发表下感言。

我们来回顾一下 react、vue 这类前端框架的页面渲染原理——虚拟 DOM 技术。框架使用一个 JavaScript 对象来表示和描述真实的 DOM 结构,是在内存中构建形成的一个虚拟的 DOM 树。在数据源(Model)发生变化时,框架通过虚拟 DOM 的差异算法找到最小 DOM 操作,然后再进行实际的 DOM 操作。维护虚拟 DOM 和差异计算就是使用框架的额外开销,这也是为什么有“用 react 或 vue 比原生开发性能低”的说法的原因。

我们要如何看待这个问题呢?

《虚拟 DOM 的性能到底如何》有一个我非常认可的说法:

虚拟 DOM 的性能理论上不可能比原生 JavaScript 操作 DOM 更高,但在大多数情况下,我们很难写出绝对优化的命令式代码,尤其是当应用程序规模较大时。React 通过虚拟 DOM 提供了一种性能下限的保证,使得开发者可以不用付出太多努力就能获得不错的性能。

所以,作为绝大多数的普通开发者中的一员,我们选择使用框架来保证产品的基本性能。

开发效率

react 和 vue 在开发效率上的优势:

1. 组件化

React 和 Vue 都采用组件化架构,是的开发者可以将 UI 分解为独立、可复用的组件。这种方式提高了代码复用性,减少了重复代码,使得开发和维护大型应用更加高效和有序。

2. 声明式编程

这两个框架都支持声明式编程,开发者只需描述 UI 应该呈现的样子,而不是具体如何去实现它。这种抽象层次的提升是的代码更易于理解和维护。

3. 虚拟 DOM

React 和 Vue 使用虚拟 DOM 来优化渲染性能。当应用的状态发生变化时,它们会构建新的虚拟 DOM 树,并计算处与旧树的差异,只更新变化的部分。这种方法减少了直接操作真实 DOM 的次数,从而提高性能。

4. 响应式数据绑定

Vue 提供了双向数据绑定,使得 UI 和数据状态之间的同步变得自动和高效。React 采用单向数据流,但也通过状态管理和 Context API 等方式提供了高效的数据响应机制。

5. 工具链和生态系统

这两个框架都有丰富的工具链和生态系统支持,包括状态管理(如 Redux、Vuex)、路由(如 React Router、Vue Router)等。这些工具和库简化了开发流程,提高了开发效率。

6. 开发体验

React 和 Vue 提供了良好的开发体验,包括热重载、时间旅行调试等特性。Vue 的文档被广泛认为是清晰和易于理解的,而 React 则有强大的社区支持和大量的教程资源。

7. 性能优化

这两个框架都提供了多种性能优化手段,如避免不必要的渲染、使用懒加载等。Vue 3 和 React 17 都引入了新的性能优化特性,如 Vue 的静态提升和预字符串化,React 的并发特性等。

8. 跨平台开发

React 通过 React Native 支持移动应用开发,Vue 通过 Vue Native 也支持跨平台开发。这些框架的跨平台能力使得开发者可以用一套代码基础开发 Web 和移动应用。

学习成本

  • React:对新手来说,React 可能有一个陡峭的学习曲线,因为它涉及到 JSX、组件生命周期、Hooks 等概念。但是,一旦掌握这些基础,React 的开发体验可以非常高效。React 生态中有许多资源可以帮助学习,包括官方文档、社区教程和第三方课程。
  • Vue:Vue 通常被认为更容易上手,特别是对于那些有原生 JavaScript 基础的开发者。Vue 的模版语法和响应式系统使得编写和理解代码变得更加直观。Vue 的生态系统虽然不如 React 庞大,但社区依然活跃,提供了大量的学习资源和工具。
  • 原生 JavaScript:学习原生 JavaScript 对于升入理解 React 和 Vue 等现代框架至关重要。原生 JavaScript 的学习可以帮助开发者更好地理解框架的工作原理,提高代码的可维护性和性能优化。然而,原生 JavaScript 开发可能在构建大型应用时效率较低,因为它缺乏现代框架提供的抽象和工具。

总结

在实际的开发场景中,React、Vue 等现代框架是比原生 JavaScript 更好的选择,框架可以让我们更高效的进行应用开发。但同时,原生 JavaScript 是一切的基础,对它的熟练掌握能让我们在使用现代框架开发时如鱼得水。

当然,在使用现代框架开发时,我们也需要注意一些优化的关键点。不拘泥于工具,高效的开发高可维护的应用,才是我们的最终目的。