NestJS 性能

2023-09-08 17:41 更新

默認(rèn)情況下,Nest 使用 Express 框架。 如前所述,Nest 還提供與其他庫(kù)的兼容性,例如 Fastify。 Nest 通過實(shí)現(xiàn)一個(gè)框架適配器來(lái)實(shí)現(xiàn)這種框架獨(dú)立性,該適配器的主要功能是將中間件和處理程序代理到適當(dāng)?shù)膸?kù)特定實(shí)現(xiàn)。

請(qǐng)注意,為了實(shí)現(xiàn)框架適配器,目標(biāo)庫(kù)必須提供與 Express 中類似的請(qǐng)求/響應(yīng)管道處理。

Fastify 為 Nest 提供了一個(gè)很好的替代框架,因?yàn)樗耘c Express 類似的方式解決設(shè)計(jì)問題。 然而,fastify 比 Express 快得多,取得了幾乎兩倍的基準(zhǔn)測(cè)試結(jié)果。 一個(gè)公平的問題是為什么 Nest 使用 Express 作為默認(rèn)的 HTTP 提供程序? 原因是 Express 被廣泛使用、廣為人知,并且擁有大量兼容的中間件,這些中間件可供 Nest 用戶開箱即用。

但是由于 Nest 提供了框架獨(dú)立性,我們可以輕松地在它們之間進(jìn)行遷移。 當(dāng)我們高度重視非??斓男阅軙r(shí),F(xiàn)astify 可能是一個(gè)更好的選擇。 要使用 Fastify,只需選擇本章所示的內(nèi)置 FastifyAdapter。

安裝

首先,我們需要安裝所需的包:

$ npm i --save @nestjs/platform-fastify

適配器

一旦安裝了 Fastify 平臺(tái),我們就可以使用 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();

默認(rèn)情況下,F(xiàn)astify 只監(jiān)聽 localhost 127.0.0.1 接口。 如果要接受其他主機(jī)上的連接,則應(yīng)在 listen() 調(diào)用中指定“0.0.0.0”:

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter(),
  );
  await app.listen(3000, '0.0.0.0');
}

平臺(tái)特定包

請(qǐng)記住,當(dāng)我們使用 FastifyAdapter 時(shí),Nest 使用 Fastify 作為 HTTP 提供程序。 這意味著依賴 Express 的每個(gè)配方可能不再有效。 相反,你應(yīng)該使用 Fastify 等效的包。

重定向響應(yīng)

Fastify 處理重定向響應(yīng)的方式與 Express 略有不同。 要使用 Fastify 進(jìn)行正確的重定向,請(qǐng)返回狀態(tài)碼和 URL,如下所示:

@Get()
index(@Res() res) {
  res.status(302).redirect('/login');
}

Fastify 選項(xiàng)

我們可以通過 FastifyAdapter 構(gòu)造函數(shù)將選項(xiàng)傳遞給 Fastify 構(gòu)造函數(shù)。 例如:

new FastifyAdapter({ logger: true });


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)