【机翻转载】【6】选择 Web 框架

来自🥬🐶程序员 Truraly | 田园 的博客,最新文章首发于:田园幻想乡 | 原文链接 | github (欢迎关注)

原文连接


为什么选择 Express.js?

我们认为 Express.js 是一个不错的默认选择,原因如下:

  • 它被广泛使用,这意味着在外部和我们组织内部都有很多关于它的共享知识。
  • 新用户可以找到大量资源来帮助他们入门。
  • 它有一个相对较浅的依赖关系树,许多依赖关系由 Express.js 组织维护。
  • 它很稳定,不会过于频繁地引入重大更改,但仍会根据需要解决安全漏洞。
  • 它在 Node.js 版本之间兼容。
  • 它已在 IBM 和 Red Hat 中得到广泛而成功的使用,包括在 IBM Cloud 用户界面中

从我们关于应该推荐哪个 Web 框架作为默认选择的深入讨论中,我们还了解并记录了使用 Express.js 时的其他一些建议。这里有两个关键提示:

  • 即使最初部署到 Kubernetes,也要注册活动和就绪终结点。这些端点在 Kubernetes 以外的环境中可用于确定和监视问题。
  • 使用 Helmet 设置 HTTP 标头,以针对某些常见攻击提供基本级别的保护。

通过阅读我们的 Web 框架建议的完整详细信息来了解更多信息。

超越 Express.js:下一代 Web 框架

虽然 Express.js 在今天被认为是一个不错的 Web 框架选择,但我们会议的讨论和观点表明,未来可能不会继续如此。Express.js 被认为处于维护模式,而不是积极开发,并且已经五年多没有看到新的主要版本。由于这种缓慢的发布节奏,人们担心该框架可能无法跟上 Node.js 运行时的发展。

我们在讨论过程中怀疑,将来我们的默认 Web 框架建议会发生变化。因此,我们花了一些时间深入研究各种指标,看看我们推荐的 Web 框架在五年后可能是什么。

在开始调查之前,我们需要定义其范围。我们考虑了可能用于处理请求和构建 API 的 Web 框架。我们有意将最初的潜在候选者库保持在尽可能广泛的范围内,并试图专注于用例,而不是寻找类似的框架。

例如,在过去,结合 Node.js、Express.js 和模板引擎是构建 Web 应用程序的常用选择。但是,今天您可以使用专用的静态站点框架来解决相同的问题。在当今的生态系统中有更多的选择,几年前对于给定的用例,Express.js 可能是默认选择,现在可能为您的用例存在一个更专业的框架。

我们从参考架构小组讨论中,以及 SimformHackr.io等媒体编制的顶级 Node.js 框架列表中编制了一份初步的候选列表。

Key metrics 关键指标

一旦我们定义了候选者,我们就整理了每个框架的一些关键指标,包括:

  • 每周下载量
  • npm 依赖项(即 npm 上有多少包依赖于此模块)
  • GitHub 依赖项
  • GitHub 星标
  • Issues
  • 最新版本
  • 创建日期

总的来说,各项指标都说明了我们的预期,如图 1 所示。Express.js 在下载统计数据中名列前茅,并且对 GitHub 和 npm 的依赖程度最高。

图 1.每个 Web 框架的高级指标。

Table of high-level metrics for each web framework

另一个关键要点是 Next.js 在列表中的位置相对较高,尽管它比其他一些框架要新得多。

Downloads 下载

下载指标对于确定受欢迎程度并不是特别有用,因为这些数字可能会受到自动化(例如来自持续集成构建)的严重偏差,并且也不包括使用内部 npm 注册表或缓存的组织。

但是,这些指标可以帮助明确框架的相对位置。图 2 中的图表基于 2021 年 10 月 14 日收集的数据,显示了按 Web 框架划分的每周 npm 下载量。Express.js 正如预期的那样占据主导地位,Next.js 也处于强势地位。

图 2.按 Web 框架划分的每周 npm 下载量。

Diagram of weekly npm downloads by web framework

查看 npm 下载数据的另一种方法是按模块检查注册表下载的百分比,如图 3 所示。这有助于解释总体注册表下载量逐年增加的事实。可以使用 npm API 计算此信息;例如,若要获取 2020 年的下载总数,可以使用终结点 https://api.npmjs.org/downloads/point/2020-01-01:2020-12-31。

Figure 3. Percentage share of npm registry downloads by web framework.
图 3.按 Web 框架划分的 npm 注册表下载百分比。

Diagram showing the percentage share of npm registry downloads by web framework

图 3 显示,随着时间的推移,Express.js 注册表的下载次数占整体的比例正在下降。这并不一定表明 Express.js 的使用率正在下降;注册表下载可能只是变得更加分散。我们将 React 添加到我们的分析中作为比较措施,发现它看到了与 Express.js 类似的趋势。

请注意,happy 在图上列出了两次 - 作用域和无作用域版本是分开处理的。

在图 3 中,您可以看到许多不太频繁下载的框架聚集在图表的底部。这里的趋势很有意思,因此图 4 放大了它们。

图 4.每个 Web 框架的高级指标表(缩放)。

A table of high-level metrics for each web framework (zoomed)

Koa 正在经历一个类似于我们在 React 和 Express.js 中看到的衰退。有趣的是,我们看到 @hapi/hapi、Fastify、Nest.js、Next.js 和 Nuxt.js 都在增加,这可能表明它们越来越受欢迎。但是,@hapi/hapi 的增加可能会受到从模块的无作用域版本的快乐迁移的影响。

Open Source Security Foundation criticality scores

开源安全基金会关键性分数

开源安全基金会(OpenSSF)设计了一个关键性评分 ,可用于评估一个项目对整个开源生态系统的重要性。我们为所有候选 Web 框架生成了关键性分数,结果如图 5 所示。

图 5.开源安全基金会关键性分数。

Open Source Security Foundation Criticality Scores

Next.js 和 Fastify 产生了最高的关键性分数,Express.js 在列表中排名靠后。您可以从项目的 GitHub 存储库 | github下载用于生成这些分数的工具,以及解释如何生成分数的详细信息的文档。

Contributions 贡献

贡献和贡献活动也是评估框架的有用指标。我们首先查看了 GitHub 为我们考虑的每个 Web 框架生成的贡献图。(可以通过转到项目的 GitHub 存储库上的“见解”视图来查找此数据。

图 6 中的上图说明了许多较旧的 Web 框架的常见场景:贡献活动的早期高峰,随后在最近几年逐渐减少。这可能表明该项目处于维护阶段,而不是处于积极开发阶段。一些较新的框架(如 Next.js)展示了更一致的活动模式,如图 6 的下图所示。

图 6.GitHub 贡献活动图。

Table of GitHub contribution activity graphs

我们考虑的另一个指标是贡献的分布,因此我们查看了每个用户(及其相关组织)的提交份额。从这些数据中,我们可以推断出一个项目是否主要由特定的个人、公司或社区领导。IBM 的技术合作伙伴架构师 Anton Whalley 创建了一个应用程序,使用 GitHub API 生成这些指标。您可以在此处访问该应用程序 或查看源代码 | github

如图 7 中的图表所示,我们研究的一些 Web 框架(如框架 1)主要由单个贡献者主导。其他的,如框架 3,贡献的分布更加分散。

图 7.每个 GitHub 用户的提交份额。

Charts showing share of commits by GitHub user

真正由社区主导的框架的优先级不是由单个实体控制的,新用户很可能能够在平等的水平上做出贡献。

结论

我们的 Node.js 参考架构建议基于 IBM 和 Red Hat 团队成功使用的内容。因此,我们预计随着时间的推移,我们的建议将继续发展。我们仍然认为 Express.js 是当今 Web 框架的一个很好的默认选择,尽管我们牢记一些已知的问题。

同时,我们不断评估其他框架,查看其指标,并考虑未来有利于其他候选者的质量。理想情况下,Web 框架应该:

  • 得到充分维护。
  • 请参阅常规版本。
  • K 及时了解 Node.js 核心功能和更改。
  • 以社区为主导,开放治理。

我们将继续审查内部和客户的使用情况和成功案例。有一些有前途的新兴 Web 框架候选者,但还没有一个框架能够超越其他框架,使其成为我们新的默认推荐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值