压缩可以大大减少响应主体的大小,从而提高 Web 应用的速度。
对于生产环境中的高流量网站,强烈建议从应用服务器卸载压缩 - 通常在反向代理(例如 Nginx)中。在这种情况下,您不应使用压缩中间件。
与 Express 一起使用(默认)
使用 compression 中间件包启用 gzip 压缩。
首先安装所需的包:
bash
$ npm i --save compression
安装完成后,将压缩中间件应用为全局中间件。
ts
import * as compression from 'compression'
// 初始化文件中的某个位置
app.use(compression())
与 Fastify 一起使用
如果使用 FastifyAdapter
,您需要使用 fastify-compress:
bash
$ npm i --save @fastify/compress
安装完成后,将 @fastify/compress
中间件应用为全局中间件。
ts
import compression from '@fastify/compress'
// 初始化文件中的某个位置
await app.register(compression)
默认情况下,当浏览器支持该编码时,@fastify/compress
将使用 Brotli 压缩(在 Node >= 11.7.0 上)。虽然 Brotli 在压缩率方面非常高效,但速度也可能非常慢。默认情况下,Brotli 将最大压缩质量设置为 11,但可以通过在 0 最小值和 11 最大值之间调整 BROTLI_PARAM_QUALITY
来调整以减少压缩时间而不是压缩质量。这将需要微调以优化空间/时间性能。质量为 4 的示例:
ts
import { constants } from 'node:zlib'
// somewhere in your initialization file
await app.register(compression, { brotliOptions: { params: { [constants.BROTLI_PARAM_QUALITY]: 4 } } })
为了简化,您可能希望告诉 fastify-compress
仅使用 deflate 和 gzip 来压缩响应;您最终可能会得到更大的响应,但它们的交付速度会快得多。
要指定编码,请为 app.register
提供第二个参数:
ts
await app.register(compression, { encodings: ['gzip', 'deflate'] })
以上告诉 fastify-compress
仅使用 gzip 和 deflate 编码,如果客户端同时支持两者,则首选 gzip。