Nodejs 服务端框架调研

5,652 阅读3分钟

背景

近期公司在尝试使用 Nodejs 做服务端,具体背景就不展开了,重点是对于 Nodejs 的定位是 BFF(Backend For Frontend,即服务于前端的后端),处理一些业务弱相关的需求,比如接口聚合、草稿缓存、用户个性化 UI 配置缓存、禁止多端登录等。

BFF 的功能其实可以非常简单,甚至可以直接使用 Express、Koa2 就可以了。不过凡事要讲究个理论上的最佳实践,即使最终没有使用,也可以更全面客观的认识现有的解决方案,对于项目极限和风险的把控可以更加游刃有余。

所以,调研先行,以 BFF 为目标,调研一下市面上现有的框架都有什么,看是否能有进一步的结论。

调研

Star History

Star History Chart

Npm Trends

注意
Express 的 Npm 下载量比其他框架高出了一个数量级(2kw+),为了让对比效果展示的更好,在折线图里去掉了它。所以折线图的颜色和下面列表数据的颜色是对不上的,请注意区分。

image.png

image.png

结论

有两点有点出乎意料啊。第一个是 Nextjs 的 Stars 竟然这么高,比 Express 都高出了一大截,而且涨势极其迅猛,比 Nestjs 的曲线还夸张。下载量竟然也是第二高,比 KoaNestjs 都高,这真的有点出乎意料了。

第二个是 Express 的下载量竟然比剩下的几个加起来都高。不过细想想也能猜到原因,估计好多框架的底层用的都是 Express,毕竟是老牌的优秀框架。细查了一下,果然不少,NextjsNuxtjsNestjs 底层都依赖了 Express。所以要是比下载量,Express 就是个 bug,必须剔除。

这样来看,「Express 系」是占了绝对上风的。Egg 是「Koa 系」的,似乎在国内比较流行,但是跟这些「大佬们」比起来,在数据上还真差了点意思。

接下来就要缩小调研范围,进行深入调研比较了。从以上数据来看,初步整理出以下结论:

  • Express 虽然数据很好,但是比起其它框架,易用性上不太够。这点 Koa 也差不多,所以都暂时不考虑
  • Nextjs 相当的出乎意料,一定要深入研究下,不过有点担心它跟 React 深度绑定;
  • Nestjs 作为综合第三名,也是要深入研究下的;
  • Egg 也可以稍微研究下,不过据说约定有点多,也就意味着限制有点多。不过这点应该还不算是特别致命;
  • Nuxtjs 担心跟 Vue 深度绑定,如果 Nextjs 的确是跟 React 深度绑定,那再研究下它;

其他框架就暂时战略性放弃。另外,有的文章还提到了 StrapiMeteor。这种就是开箱即用的工具了,虽然也可以算是后端框架,但是总觉得不那么纯粹,有那么多冗余在,总会觉得别扭。以后另开文章写写它们吧。

最后声明,以上结论是结合了笔者的实际需求做出的,不具有普遍性,仅做参考。各位同学请根据自己的情况进行判断。

挖掘最佳实践的方法:拉时间线。故事往往可以包装,但时间线往往不骗人。

参考文献