Passer au contenu

Compression

La compression peut considérablement diminuer la taille du corps de réponse, augmentant ainsi la vitesse d’une application web.

Pour les sites web à fort trafic en production, il est fortement recommandé de décharger la compression du serveur d’application - généralement dans un proxy inverse (par exemple, Nginx). Dans ce cas, vous ne devriez pas utiliser de middleware de compression.

Utiliser avec Express (par défaut)

Utilisez le package middleware compression pour activer la compression gzip.

Tout d’abord, installez le package requis :

Fenêtre de terminal
$ npm i --save compression

Une fois l’installation terminée, appliquez le middleware de compression en tant que middleware global.

Application du middleware de compression
import * as compression from 'compression';
// quelque part dans votre fichier d'initialisation
app.use(compression());

Utiliser avec Fastify

Si vous utilisez le FastifyAdapter, vous voudrez utiliser fastify-compress :

Fenêtre de terminal
$ npm i --save @fastify/compress

Une fois l’installation terminée, appliquez le middleware @fastify/compress en tant que middleware global.

Application du middleware Fastify
import compression from '@fastify/compress';
// quelque part dans votre fichier d'initialisation
await app.register(compression);

Par défaut, @fastify/compress utilisera la compression Brotli (sur Node >= 11.7.0) lorsque les navigateurs indiquent un support pour l’encodage. Bien que Brotli puisse être très efficace en termes de rapport de compression, il peut également être relativement lent. Par défaut, Brotli définit une qualité de compression maximale de 11, bien qu’il puisse être ajusté pour réduire le temps de compression au détriment de la qualité de compression en ajustant le BROTLI_PARAM_QUALITY entre 0 min et 11 max. Cela nécessitera un réglage fin pour optimiser le rapport espace/temps. Un exemple avec une qualité de 4 :

Paramétrer Brotli pour la compression
import { constants } from 'zlib';
// quelque part dans votre fichier d'initialisation
await app.register(compression, {
brotliOptions: {
params: {
[constants.BROTLI_PARAM_QUALITY]: 4
}
}
});

Pour simplifier, vous voudrez peut-être dire à fastify-compress de n’utiliser que deflate et gzip pour compresser les réponses ; vous obtiendrez potentiellement des réponses plus volumineuses, mais elles seront livrées beaucoup plus rapidement.

Pour spécifier les encodages, fournissez un deuxième argument à app.register :

Spécifier les encodages pour Fastify
await app.register(compression, {
encodings: ['gzip', 'deflate']
});

Ce qui précède indique à fastify-compress d’utiliser uniquement les encodages gzip et deflate, préférant gzip si le client prend en charge les deux.