generated from TMaize/tmaize-blog
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
冯道廷
committed
Nov 5, 2024
1 parent
f1f2432
commit 88f4378
Showing
1 changed file
with
72 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
--- | ||
layout: mypost | ||
title: 2024年了,nodejs框架怎么选? | ||
tags: [前端] | ||
--- | ||
|
||
## 背景 | ||
|
||
昨天看了一篇文章,讲述的是《[裸辞四个月,前端仔靠着 Nest 绝境收下 offer](https://mp.weixin.qq.com/s/oa8yhCoR3IpKG2eGRhgJwQ)》,其中说到: | ||
|
||
> “当有 2 家自研公司在对我面试时,我抛出了熟悉 nest 开发后。面试官感觉眼神都不一样了,这是真实的。然后这两家公司面试完后,我总结下来,1 个小时有大概半小时都是在谈论服务端开发对前端的助益,更多的是关于 fp 开发与 oop 开发的区别,有哪些收获?除此池外,我们还会不停探讨关于设计模式、数据库方面的话题,如:表关系、如何解耦之类的。也就是说,有面试官一直在挖掘你的深度、广度。你和面试官侃侃而谈,自然结果不会差!” | ||
我读完后的感悟是:**差异化竞争,人无我有,人有我优。** | ||
|
||
> “这不是以前,人人都会 Jquery,但是你会 Vue 或者 React 你就有了更强竞争力,现在前端的活,更多都是围绕做界面,做交互,现在 Vue、React、Ts 谁不会用呢?因此主要竞争力方面,人人都难分高下,就需要靠别的附加价值去击败别人,因此无论是工程化方面也好,服务端知识也好,本身就是附加价值的一个体现。” | ||
于是,就准备学 nodejs,也有了这篇文章。 | ||
|
||
## 分析 | ||
|
||
下面是对几个常见 Node.js 框架的优缺点介绍,最后会给出一个综合比较和选型建议的表格,帮助你更好地理解它们的特性和适用场景。 | ||
|
||
### 1. **NestJS** | ||
|
||
- **优点**:NestJS 是一个基于 TypeScript 的框架,结构类似于 Angular,支持依赖注入和模块化开发,内置支持 GraphQL 和 WebSocket,非常适合大型应用的开发。它还有丰富的插件系统,良好的文档和活跃的社区。 | ||
- **缺点**:NestJS 的学习曲线较陡,尤其对初学者可能不太友好。此外,它相对较重,适合结构化清晰的中大型项目,小型项目可能显得有些复杂。 | ||
|
||
### 2. **Express** | ||
|
||
- **优点**:Express 是 Node.js 最早、最受欢迎的框架之一,简洁、灵活、成熟,适合构建快速开发、轻量级的 Web 应用。它的生态系统庞大,拥有大量插件,几乎可以满足任何需求。 | ||
- **缺点**:Express 比较偏底层,缺少约束和结构化支持。随着项目规模扩大,代码的可维护性可能会下降。此外,它本身不支持 TypeScript,但可以通过配置来支持。 | ||
|
||
### 3. **Koa** | ||
|
||
- **优点**:Koa 是由 Express 的开发团队创建的一个轻量级框架,专注于简化中间件的编写。它提供更现代化的 API,如 `async/await`,比 Express 更加简洁和模块化,适合高度定制化的项目。 | ||
- **缺点**:Koa 没有内置的路由和中间件管理,因此需要额外安装和配置。它更加灵活,但也意味着开发者需要更精细地控制项目结构,对初学者可能不太友好。 | ||
|
||
### 4. **Fastify** | ||
|
||
- **优点**:Fastify 主打性能,适合需要极高吞吐量的 API 服务。它内置 JSON schema 验证,自动生成 API 文档,并且和 Express 非常相似,易于学习和迁移。其插件系统和 TypeScript 支持也非常优秀。 | ||
- **缺点**:Fastify 的生态相对较小,和 Express 相比,第三方插件可能较少。虽然是轻量化框架,但在处理复杂业务时,可能会有一些限制。 | ||
|
||
### 5. **Egg.js** | ||
|
||
- **优点**:Egg.js 是阿里巴巴推出的企业级框架,专注于提升可维护性、插件化开发,适合大规模项目。它内置强大的插件体系,非常适合大型企业应用开发。 | ||
- **缺点**:Egg.js 主要面向中国市场,英文文档和国际化支持相对不足,适合对框架依赖程度较高的项目,且学习曲线也比较高。 | ||
|
||
### 综合比较和选型建议 | ||
|
||
```markdown | ||
| 框架 | GitHub Stars | 特点 | 优势 | 劣势 | 适用场景 | | ||
| ------- | ------------ | ------------------------ | ------------------------------------ | ---------------------------- | ---------------------------- | | ||
| NestJS | 67.6k | 面向大型项目,模块化支持 | 强大的 TypeScript 支持、结构化清晰 | 学习曲线较高,对小项目有些重 | 大中型企业应用 | | ||
| Express | 65.6k | 轻量、灵活 | 庞大生态系统、上手简单 | 结构化差,项目变大后维护困难 | 轻量、快速开发 | | ||
| Koa | 35.2k | 现代化、模块化 | 更灵活的中间件机制,支持 async/await | 缺少内置中间件,需要更多配置 | 定制化的应用 | | ||
| Fastify | 32.3k | 高性能,适合 API 服务 | 极高性能、内置 JSON schema 支持 | 第三方生态相对较小 | 高吞吐量的 API 服务 | | ||
| Egg.js | 18.9k | 企业级框架 | 强大的插件体系,适合大规模应用 | 学习曲线高,国际化支持不足 | 大型企业应用,特别在中国市场 | | ||
``` | ||
|
||
### 选型建议 | ||
|
||
- **小型项目**:如果你需要一个轻量级、快速上手的框架,Express 是不错的选择,尤其适合小型 Web 应用。 | ||
- **定制化项目**:如果项目需要高度定制化,Koa 是很好的选择,提供了极简的核心,可以自由配置。 | ||
- **高性能 API**:如果关注性能,Fastify 是首选,它提供了极高的吞吐量,非常适合微服务架构。 | ||
- **大型项目**:NestJS 非常适合需要清晰架构的大型项目,它的模块化设计能够很好地管理复杂的业务。 | ||
- **企业应用**:对于企业级应用,特别是中国市场,Egg.js 的插件体系可以帮助你快速构建高质量的应用。 | ||
|
||
## 最后 | ||
|
||
看了神光大佬的《[给你 5 个学习 Nest 的理由,你会心动么?](https://juejin.cn/book/7226988578700525605/section/7238472356557570103)》,其实没那么多选择,**企业级开发, Nest 基本是唯一的选择了。** | ||
|
||
所以,最终胜出者:NestJS。 |