NestJS Logo

Compression

La compression permet de réduire considérablement la taille du corps de la réponse, ce qui augmente 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 - typiquement en utilisant un proxy inverse à la place (par exemple, Nginx). Dans ce cas, vous ne devriez pas utiliser de middleware de compression.

Utilisation avec Express (par défaut)#

Utilisez le package middleware compression pour activer la compression gzip.

Installez d'abord le package requis :


$ npm i --save-dev @types/compression

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


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

Utilisation avec Fastify#

Si vous utilisez l'adaptateur FastifyAdapter, vous devrez utiliser fastify-compress :


$ npm i --save @fastify/compress

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


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 qu'ils supportent cet encodage. Bien que Brotli puisse être assez efficace en termes de taux de compression, il peut aussi être assez lent. Par défaut, Brotli définit une qualité de compression maximale de 11, bien qu'elle puisse être ajustée pour réduire le temps de compression au détriment de la qualité de compression en ajustant le paramètre BROTLI_PARAM_QUALITY entre 0 (minimum) et 11 (maximum). Cela nécessitera un réglage fin pour optimiser les performances en termes d'espace et de temps. Voici un exemple avec une qualité de 4 :


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 pouvez demander à fastify-compress d'utiliser uniquement la compression deflate et gzip pour compresser les réponses; cela peut entraîner des réponses potentiellement plus volumineuses, mais elles seront livrées beaucoup plus rapidement.

Pour spécifier les encodages, il faut fournir un second argument à app.register :


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

Ce qui précède indique à fastify-compress de n'utiliser que les encodages gzip et deflate, en préférant gzip si le client supporte les deux.

Soutenez-nous

Nest est un projet open source sous licence MIT. Il peut se développer grâce au soutien de ces personnes formidables. Si vous souhaitez les rejoindre, apprenez-en plus ici.

Sponsors Principaux

Trilon LogoMarblism LogoMojam LogoAmplication Logo

Sponsors / Partenaires

Devenir un sponsor