Compression

Compression can greatly decrease the size of the response body, thereby increasing the speed of a web app.

For high-traffic websites in production, it is strongly recommended to offload compression from the application server - typically in a reverse proxy (e.g., Nginx). In that case, you should not use compression middleware.

Use with Express (default)

Use the compression middleware package to enable gzip compression.

First install the required package:

  1. $ npm i --save compression

Once the installation is complete, apply the compression middleware as global middleware.

  1. import * as compression from 'compression';
  2. // somewhere in your initialization file
  3. app.use(compression());

Use with Fastify

If using the FastifyAdapter, you’ll want to use fastify-compress:

  1. $ npm i --save fastify-compress

Once the installation is complete, apply the fastify-compress middleware as global middleware.

  1. import * as compression from 'fastify-compress';
  2. // somewhere in your initialization file
  3. app.register(compression);

By default, fastify-compress will use Brotli compression (on Node >= 11.7.0) when browsers indicate support for the encoding. While Brotli is quite efficient in terms of compression ratio, it’s also quite slow. Due to this, you may want to tell fastify-compress to only use deflate and gzip to compress responses; you’ll end up with larger responses but they’ll be delivered much more quickly.

To specify encodings, provide a second argument to app.register:

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

The above tells fastify-compress to only use gzip and deflate encodings, preferring gzip if the client supports both.