如今,市面上充斥着大量的优秀前端框架,各有千秋。选择哪个框架来学习,或者哪个框架最适合你的下一个项目,确实让人难以抉择。
本文将对比五个最流行的前端 JavaScript 框架,对它们的特性、工具、学习曲线以及其他优缺点进行高层次的概述。
当然,我无法告诉你哪个框架是“最佳”的:这取决于你的主观感受,以及你当前的 JavaScript 经验水平和正在开发的应用程序类型。但是,我会快速让你了解主要竞争者,并帮助你做出明智的决策,选择哪个框架进行深入学习。
流行度是根据 2020 年 JavaScript 状态调查的框架使用情况确定的。该调查共有 23,765 名受访者参与,竞争者的排名如下:
我还考虑了同一调查中的“框架认知度”:
我还将这些结果与 2020 年 Stack Overflow 开发者调查的框架使用情况进行了交叉验证。该调查共有 65,000 名受访者参与,其结果与 JavaScript 状态调查的结果基本一致——尽管不幸的是,它并没有区分前端和后端框架。
当然,还可以参考许多其他指标,例如职位空缺、GitHub 星星、npm 下载量、GitHub“使用情况”等等。如果你想了解其中一些指标(至少对于前三大框架而言),请参考这个 GitHub Gist。
要交互式地查看这些框架的对比情况,可以参考 npmtrends 的这个图表。
最关键的问题是,列表中最流行的框架(React)将自己定义为“库”。
我不希望深入探讨这个问题,因为已经有完整的文章专门解释框架和库之间的区别。在本篇文章中,我将使用 Martin Fowler 提供的以下定义:
库本质上是一组可以调用的函数,如今通常组织成类。每次调用都会执行一些工作,然后将控制权返回给客户端。
框架体现了一种抽象设计,并内置了更多行为。为了使用它,你需要将你的行为插入到框架的各个地方,方法是通过子类化或插入你自己的类。然后,框架的代码会在这些点调用你的代码。
在我看来,React 更符合框架的行为,而不是库。虽然它在技术上不是框架,但开发人员通常会从其生态系统中采用许多工具和包来使其发挥框架的作用。
React 最初由 Facebook 于 2013 年发布,是目前最流行的前端 JavaScript 框架。Facebook、Netflix 和 Airbnb 等公司都在生产环境中使用 React,它拥有庞大的开发者群体——这意味着很容易在线找到帮助和资源。
React 的主要目的是从可重用的组件中组合交互式用户界面。它使用 JSX(JavaScript 的语法扩展)进行模板化,并实现单向数据流模型来使用数据填充组件。每当组件数据发生变化时,React 都会使用其虚拟 DOM 快速有效地更新页面。
开发者工具很好用。React 团队构建并维护了一个 CLI(Create React App)来快速轻松地搭建新项目,以及适用于 Chrome 和 Firefox 的开发者工具扩展。有许多可用的第三方包可以完成各种任务(例如路由、处理表单和动画),以及一些基于 React 的框架,例如 Next.js 和 Gatsby。
React 遵循“一次学习,随处编写”的理念。它可以使用 React Native 驱动移动应用程序,并可以使用 Node 在服务器端渲染。这意味着出色的 SEO 支持,随着服务器组件的推出,这种支持只会越来越好。
React 的主要批评之一是它过于不受约束:它只关注应用程序的视图层,而将其他所有内容留给开发者。有些人喜欢这种自由,但其他人——尤其是新开发者——可能会被这种鼓励的非结构化编码方法所压倒。
React 的学习曲线适中。它鼓励使用各种函数式编程范式(例如不变性和纯函数),这意味着开发者最好在尝试构建任何严肃的东西之前掌握这些概念。
如果你对 React 的不受约束的方法以及它将大部分开发过程留给开发者感到满意,那么它对于任何规模的数据驱动型应用程序来说都是一个不错的选择。
Angular 是 Google 在前端框架领域的产品。它于 2010 年作为 AngularJS(或 Angular 1)诞生,并立即取得了成功,主要是因为它是第一个使开发人员能够构建我们现在称为单页应用程序的框架。
为了解决性能问题以及构建大型 JavaScript 应用程序的挑战,Google 从头开始重写了 AngularJS,并在 2016 年发布了 Angular 2(现在简称为 Angular)。这两个版本之间没有简单的迁移路径,因此 AngularJS 和 Angular 成为两个独立的框架。AngularJS 现在已停止维护,不应用于新项目。
至于 Angular,它是前端框架世界中的重量级人物。Google 和 Microsoft 等公司都在生产环境中使用它,因此它绝对经过了充分的实战检验。在线上也有许多可用的资源(例如优秀的 Tour of Heroes 教程),并且 Stack Overflow 上也有很多关于 Angular 的问题。
与仅处理视图层的 React 不同,Angular 提供了构建单页客户端应用程序的完整解决方案。Angular 组件可以实现双向数据绑定,这允许它们同时监听事件并在父组件和子组件之间更新值。模板是 HTML 片段,允许使用特殊语法来利用 Angular 的许多功能。TypeScript 是 Angular 开发的主要语言,使该框架特别适合企业级应用程序。
工具很好用。Angular 提供了一个高度抛光的 CLI 来初始化、开发、搭建和维护 Angular 应用程序。还提供 Chrome 和 Firefox Dev Tools 扩展程序来帮助调试 Angular 应用程序。Angular 原生就提供了处理许多常见任务(例如表单和路由)的解决方案,但仍然存在丰富的第三方库生态系统。
在我看来,Angular 的学习曲线是这里列出的所有框架中最陡峭的。开发人员需要熟悉 TypeScript,以及装饰器和依赖注入等概念,才能有效地使用该框架。因此,它不适合新开发者。相反,它更适合团队合作构建大型应用程序。
如果你想全面了解 React 和 Angular 之间的区别,请参阅“React 与 Angular:深入比较”。
请注意,这些统计数据适用于 Vue v2。版本 3 可用,但必须安装为 vue@next。
我们的列表中排名第三的是 Vue.js,这是一个模型-视图-视图模型 (MVVM) 前端框架,用于构建用户界面和单页应用程序。它由尤雨溪编写,于 2014 年首次发布。Vue 拥有非常忠实的开发者群体(例如,它比 React 拥有更多的 GitHub 星星),这可能是因为它很好地填补了 AngularJS 重写为 Angular 后留下的空白。
Vue 由大约 20 名核心团队成员开发和维护,虽然它没有直接得到互联网巨头的支持,但阿里巴巴、Gitlab 和 Adobe 等公司都在生产环境中使用它。Vue 的文档可以说是所有框架中最好的,其论坛也是获得代码问题帮助的绝佳资源。Vue 在 PHP 世界也很流行,并作为 Laravel 框架的一部分提供。
Vue 的一个卖点是它从一开始就设计为可逐步采用。这意味着你可以将 Vue 添加到常规网页中以增强其功能,或者你可以全力以赴地使用它来构建完整的单页应用程序。Vue.js 使用基于 HTML 的模板语法,允许你轻松地将属性绑定到底层数据模型。它还提供单文件组件,将模板、JavaScript 代码和作用域 CSS 保留在同一个文件中。
Vue 周围的工具很棒。有一个官方的 CLI 来搭建和开发 Vue 应用程序,并且有一个针对 Chrome 和 Firefox 的开发者工具扩展程序来帮助调试。与 React 形成鲜明对比的是,Vue 提供了用于路由和状态管理的官方包,这提供了一种令人愉悦的标准化方法。还有一些广泛的第三方工具,以及基于 Vue 的框架,例如 Nuxt.js 和 Gridsome(Vue 对 React 的 Next.js 和 Gatsby 的回应)。
使用 Vue 的入门门槛很低,部分原因是它采用增量方法构建应用程序,部分原因是它基于 HTML、CSS 和 JavaScript——这些技术对于任何开发人员来说都应该很熟悉。
Vue 是各种规模应用程序的绝佳选择。它适合经验较少的开发人员,以及那些更喜欢从框架中获得更多结构和指导的开发人员。
Svelte 由 Rich Harris 于 2016 年发布,是框架领域的新成员,它采用与本列表中其他任何框架都不同的方法来构建 Web 应用程序。其网站指出:
Svelte 在构建时将你的应用程序转换为理想的 JavaScript 代码,而不是在运行时解释你的应用程序代码。这意味着你不会为框架的抽象付出性能代价,并且在应用程序首次加载时也不会受到惩罚。
换句话说,它避免了虚拟 DOM 的概念,而是在构建时将你的代码编译成小型、普通的 JavaScript 模块,这些模块会在你的应用程序状态发生变化时更新 DOM。正如你所想象的那样,这使得应用程序速度更快,占用空间更小。Svelte 还原生处理状态管理,并开箱即用地提供反应性。
不幸的是,工具目前有点让人头疼。最初,Sapper(一个构建在 Svelte 之上的应用程序框架)用于构建具有预定义结构的 Svelte 应用程序,并为其配备一些更高级的功能,例如路由和服务器端渲染。但是,在 2020 年 11 月,Svelte 的创建者宣布 Sapper 的 1.0 版本永远不会发布,并且 SvelteKit 现在是开始使用 Svelte 构建应用程序的唯一推荐方法。还提供适用于 Chrome 和 Firefox 的浏览器开发者工具扩展程序,以及各种第三方模块,尽管数量远不及更成熟的框架。
虽然 Svelte 的学习曲线非常低,但其社区仍然很小,并且尚未获得与这里提到的前三大框架相同的吸引力。但 IBM 和纽约时报等公司正在生产环境中使用它,它绝对是一个值得在未来几个月和几年内关注的框架。
由于 Svelte 还不够成熟,因此它非常适合小型项目。不过,这种情况正在改变。SvelteKit 处于公开测试阶段,社区也在不断发展壮大。虽然 Svelte 目前还算是一个新来者,但你应该关注这个领域……
我在本文中将 Ember 作为最后一个框架来介绍,因为它从前端框架的早期就存在了。它最初于 2011 年发布,但在开发人员中仍然保持着持续的流行度:
它已经有近十年的历史了,其历史可以追溯到 React、Vue、Svelte 和所有其他框架之前。该框架从未处于前端炒作浪潮的最前沿,但它默默地使团队能够稳定而持续地发布产品——其中包括 Qonto 和 CLARK,这两家公司都是 2020 年欧洲排名前 50 的金融科技公司
与 Angular 类似,Ember 采用了一种更全面的方法来进行应用程序开发,并提供了构建现代前端 JavaScript 应用程序所需的一切。这包括路由解决方案、数据层以及默认情况下内置于每个应用程序中的功能齐全的现代测试工具。它遵循六周的发布周期(当发布新的次要版本时),并致力于稳定性。对于那些无法不断重写应用程序以避免被发展速度更快的框架甩在后面的开发人员来说,这可能是一个真正的优势。
围绕 Ember 出现了一系列广泛的工具,从 Ember CLI(创建、构建、测试和服务 Ember 应用程序的官方方法)到 Ember Inspector(官方支持的浏览器附加组件,使你能够检查应用程序中的 Ember 对象)。还有一些可用的第三方库,并且 CLI 提供了一种常见格式(即 Ember Addons)来分发它们。
Ember 的社区不如 React 等社区大,但其成员非常积极参与,并拥有论坛和 Discord 服务器,你可以在那里寻求代码问题的帮助。Ember 是这里列出的框架中最有主见的,它采用“约定优于配置”的方法。这加上开发人员需要熟悉更高级的概念——例如序列化器和适配器——使其学习曲线适中到陡峭。
Ember 可能不适合初学者或小型项目。它有很多活动部件,并且在如何构建事物方面并没有提供太多灵活性。但当与团队一起构建丰富、复杂的前端应用程序时,它确实会大放异彩。
这就是我对当今市场上五个最流行的前端框架的比较。虽然这不是对每个框架功能的详尽考察,但我希望它能让你了解哪些主要竞争者可能适合你的下一个项目,或者哪些框架值得你进一步探索。
如果你有任何问题或意见,为什么不加入 SitePoint 论坛进行讨论呢?
选择前端框架时,需要考虑学习曲线、社区支持、文档、灵活性和性能等因素。如果你不熟悉前端开发,学习曲线很重要。有些框架比其他框架更容易学习。社区支持对于在遇到问题时获得帮助至关重要。大型活跃的社区通常意味着更多资源和教程。良好的文档可以使学习过程更顺利。灵活性是指框架适应不同项目需求的能力。最后,性能会影响应用程序的速度和用户体验。
Angular 是 Google 开发的一个功能强大、功能丰富的框架。它以其双向数据绑定、依赖注入和模块化架构而闻名。但是,与其他框架相比,它的学习曲线很陡峭。它非常适合大型复杂的应用程序。
React 由 Facebook 开发,以其虚拟 DOM 而闻名,虚拟 DOM 通过最大限度地减少对实际 DOM 的直接操作来提高性能。它是基于组件的,这促进了可重用性和可维护性。它还有一个庞大的社区和大量的库。
Vue 是一个渐进式框架,这意味着你可以逐步采用它。它易于学习,语法比 Angular 和 React 更简单。它还有一个虚拟 DOM 和基于组件的架构。它非常适合中小型项目。
Angular 中的双向数据绑定意味着当模型中的数据发生变化时,视图会反映这种变化,反之亦然。模型和视图之间的这种同步简化了代码并提高了可读性。
虚拟 DOM 是实际 DOM 的轻量级副本。当发生更改时,首先会对虚拟 DOM 进行更改。然后,差异算法会将新的虚拟 DOM 与旧的虚拟 DOM 进行比较,并且只有实际的更改才会在真实的 DOM 中更新。此过程提高了性能。
Angular 的模块化架构将代码组织成模块,每个模块负责一项特定功能。这种关注点分离使代码更易于维护和测试。它还促进了代码的可重用性和可扩展性。
基于组件的架构将 UI 分解成独立的可重用组件。每个组件都有其自身的逻辑并控制 UI 的一部分。这种方法促进了代码的可重用性、可维护性和可测试性。
大型活跃的社区可以提供宝贵的资源、教程和帮助,让你在遇到问题时获得帮助。它还表明了框架的流行程度和使用寿命。Angular、React 和 Vue 都拥有强大的社区支持。
性能直接影响应用程序的速度。缓慢的应用程序可能会让用户感到沮丧,并导致较高的跳出率。因此,选择高性能框架可以增强用户体验。
以上是比较了5个最受欢迎的前端框架的详细内容。更多信息请关注PHP中文网其他相关文章!