【机翻转载】【6】选择 Web 框架
目录
为什么选择 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 可能是默认选择,现在可能为您的用例存在一个更专业的框架。
我们从参考架构小组讨论中,以及 Simform 和 Hackr.io等媒体编制的顶级 Node.js 框架列表中编制了一份初步的候选列表。
Key metrics 关键指标
一旦我们定义了候选者,我们就整理了每个框架的一些关键指标,包括:
- 每周下载量
- npm 依赖项(即 npm 上有多少包依赖于此模块)
- GitHub 依赖项
- GitHub 星标
- Issues
- 最新版本
- 创建日期
总的来说,各项指标都说明了我们的预期,如图 1 所示。Express.js 在下载统计数据中名列前茅,并且对 GitHub 和 npm 的依赖程度最高。
图 1.每个 Web 框架的高级指标。
另一个关键要点是 Next.js 在列表中的位置相对较高,尽管它比其他一些框架要新得多。
Downloads 下载
下载指标对于确定受欢迎程度并不是特别有用,因为这些数字可能会受到自动化(例如来自持续集成构建)的严重偏差,并且也不包括使用内部 npm 注册表或缓存的组织。
但是,这些指标可以帮助明确框架的相对位置。图 2 中的图表基于 2021 年 10 月 14 日收集的数据,显示了按 Web 框架划分的每周 npm 下载量。Express.js 正如预期的那样占据主导地位,Next.js 也处于强势地位。
图 2.按 Web 框架划分的每周 npm 下载量。
查看 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 注册表下载百分比。
图 3 显示,随着时间的推移,Express.js 注册表的下载次数占整体的比例正在下降。这并不一定表明 Express.js 的使用率正在下降;注册表下载可能只是变得更加分散。我们将 React 添加到我们的分析中作为比较措施,发现它看到了与 Express.js 类似的趋势。
请注意,happy 在图上列出了两次 - 作用域和无作用域版本是分开处理的。
在图 3 中,您可以看到许多不太频繁下载的框架聚集在图表的底部。这里的趋势很有意思,因此图 4 放大了它们。
图 4.每个 Web 框架的高级指标表(缩放)。
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.开源安全基金会关键性分数。
Next.js 和 Fastify 产生了最高的关键性分数,Express.js 在列表中排名靠后。您可以从项目的 GitHub 存储库 | Github下载用于生成这些分数的工具,以及解释如何生成分数的详细信息的文档。
Contributions 贡献
贡献和贡献活动也是评估框架的有用指标。我们首先查看了 GitHub 为我们考虑的每个 Web 框架生成的贡献图。(可以通过转到项目的 GitHub 存储库上的“见解”视图来查找此数据。
图 6 中的上图说明了许多较旧的 Web 框架的常见场景:贡献活动的早期高峰,随后在最近几年逐渐减少。这可能表明该项目处于维护阶段,而不是处于积极开发阶段。一些较新的框架(如 Next.js)展示了更一致的活动模式,如图 6 的下图所示。
图 6.GitHub 贡献活动图。
我们考虑的另一个指标是贡献的分布,因此我们查看了每个用户(及其相关组织)的提交份额。从这些数据中,我们可以推断出一个项目是否主要由特定的个人、公司或社区领导。IBM 的技术合作伙伴架构师 Anton Whalley 创建了一个应用程序,使用 GitHub API 生成这些指标。您可以在此处访问该应用程序 或查看源代码 | Github。
如图 7 中的图表所示,我们研究的一些 Web 框架(如框架 1)主要由单个贡献者主导。其他的,如框架 3,贡献的分布更加分散。
图 7.每个 GitHub 用户的提交份额。
真正由社区主导的框架的优先级不是由单个实体控制的,新用户很可能能够在平等的水平上做出贡献。
结论
我们的 Node.js 参考架构建议基于 IBM 和 Red Hat 团队成功使用的内容。因此,我们预计随着时间的推移,我们的建议将继续发展。我们仍然认为 Express.js 是当今 Web 框架的一个很好的默认选择,尽管我们牢记一些已知的问题。
同时,我们不断评估其他框架,查看其指标,并考虑未来有利于其他候选者的质量。理想情况下,Web 框架应该:
- 得到充分维护。
- 请参阅常规版本。
- K 及时了解 Node.js 核心功能和更改。
- 以社区为主导,开放治理。
我们将继续审查内部和客户的使用情况和成功案例。有一些有前途的新兴 Web 框架候选者,但还没有一个框架能够超越其他框架,使其成为我们新的默认推荐。