Skip to main content

压缩

压缩可以大大减小响应体的大小,从而提高 Web 应用程序的速度。

对于生产中的**高流量(high-traffic)**网站,强烈建议将压缩从应用程序服务器卸载 - 通常在反向代理(例如 Nginx)中。 在这种情况下,您不应使用压缩中间件。

与 Express(默认)一起使用

使用压缩中间件包启用 gzip 压缩。

首先安装所需的包:

npm i --save compression

安装完成后,将压缩中间件作为全局中间件应用。

import * as compression from 'compression';
// 在初始化文件中的某个地方
app.use(compression());

与 Fastify 一起使用

如果使用 FastifyAdapter,您将希望使用 fastify-compress

npm i --save @fastify/compress

安装完成后,将 @fastify/compress 中间件作为全局中间件应用。

import compression from '@fastify/compress';
// 在初始化文件中的某个地方
await app.register(compression);

默认情况下,@fastify/compress 将在浏览器指示支持该编码时使用 Brotli 压缩(在 Node >= 11.7.0 上)。 虽然 Brotli 在压缩比方面可能非常高效,但它也可能非常慢。 默认情况下,Brotli 设置了最大压缩质量为 11, 尽管可以通过调整 BROTLI_PARAM_QUALITY 在 0 最小和 11 最大之间来减少压缩时间以换取压缩质量。 这将需要进行微调以优化空间/时间性能。一个设置质量为 4 的示例:

import { constants } from 'zlib';
// 在初始化文件中的某个地方
await app.register(compression, { brotliOptions: { params: { [constants.BROTLI_PARAM_QUALITY]: 4 } } });

为了简化,您可能希望告诉 fastify-compress 只使用 deflategzip 来压缩响应; 这样可能会得到更大的响应,但它们将更快地传递。

要指定编码,向 app.register 提供第二个参数:

await app.register(compression, { encodings: ['gzip', 'deflate'] });

上面的代码告诉 fastify-compress 只使用 gzipdeflate 编码,如果客户端同时支持两者,则优先使用 gzip