Nest.js 性能 (Fastify)
默认情况下,Nest 使用 Express 框架。 如前所述,Nest 还提供与其他库的兼容性,例如 Fastify。 Nest 通过实现一个框架适配器来实现这种框架独立性,该适配器的主要功能是将中间件和处理程序代理到适当的库特定实现。
请注意,为了实现框架适配器,目标库必须提供与 Express 中类似的请求/响应管道处理。
Fastify 为 Nest 提供了一个很好的替代框架,因为它以与 Express 类似的方式解决设计问题。 然而,fastify 比 Express 快得多,取得了几乎两倍的基准测试结果。 一个公平的问题是为什么 Nest 使用 Express 作为默认的 HTTP 提供程序? 原因是 Express 被广泛使用、广为人知,并且拥有大量兼容的中间件,这些中间件可供 Nest 用户开箱即用。
但是由于 Nest 提供了框架独立性,我们可以轻松地在它们之间进行迁移。 当我们高度重视非常快的性能时,Fastify 可能是一个更好的选择。 要使用 Fastify,只需选择本章所示的内置 FastifyAdapter
。
安装
首先,我们需要安装所需的包:
$ npm i --save @nestjs/platform-fastify
适配器
一旦安装了 Fastify 平台,我们就可以使用 FastifyAdapter
。
import { NestFactory } from '@nestjs/core';
import {
FastifyAdapter,
NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter()
);
await app.listen(3000);
}
bootstrap();
默认情况下,Fastify 只监听 localhost 127.0.0.1
接口。 如果要接受其他主机上的连接,则应在 listen()
调用中指定“0.0.0.0”:
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(
AppModule,
new FastifyAdapter(),
);
await app.listen(3000, '0.0.0.0');
}
平台特定包
请记住,当我们使用 FastifyAdapter
时,Nest 使用 Fastify 作为 HTTP 提供程序。 这意味着依赖 Express 的每个配方可能不再有效。 相反,你应该使用 Fastify 等效的包。
重定向响应
Fastify 处理重定向响应的方式与 Express 略有不同。 要使用 Fastify 进行正确的重定向,请返回状态码和 URL,如下所示:
@Get()
index(@Res() res) {
res.status(302).redirect('/login');
}
Fastify 选项
我们可以通过 FastifyAdapter 构造函数将选项传递给 Fastify 构造函数。 例如:
new FastifyAdapter({ logger: true });