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 :
$ npm i --save 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'initialisationapp.use(compression());
Utiliser avec Fastify
Si vous utilisez le FastifyAdapter
, vous voudrez 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'initialisationawait 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 :
import { constants } from 'zlib';// quelque part dans votre fichier d'initialisationawait 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
:
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.