compression middleware
middleware de compression de Node.js.
Les codages de compression suivants sont pris en charge :
- dégonfler
- gzip
- br (brotli)
Note Brotli n’est supporté que depuis les versions de Node.js v11.7.0 et v10.16.0.
Installer
Ceci est un module Node.js disponible via
npm registry. L’installation se fait à l’aide de la commande
npm install:
$ npm install compressionAPI
var compression = require('compression');compression([options])
Retourne le middleware de compression en utilisant les options données. Le middleware
va tenter de compresser les corps de réponse pour toutes les requêtes qui traversent
le middleware, basé sur les options données.
Ce middleware ne compresse jamais les réponses qui incluent un en-tête Cache-Control
avec la directive [no-transformhttps://tools.ietf.org/html/rfc7234#section-5.2.2.4),
comme compression transformera le corps.
Options
compression() accepte ces propriétés dans l’objet d’options. En plus de
ceux listés ci-dessous, zlib les options peuvent être
passées à l’objet d’options ou
brotli options.
chunkSize
Type: Number
Par défaut: zlib.constants.Z_DEFAULT_CHUNK, ou 16384.
Voir la documentation de Node.js concernant l’utilisation.
Filtre
Type: Fonction
Une fonction pour décider si la réponse doit être considérée pour la compression.
Cette fonction est appelée en tant que filter(req, res) et devrait retourner
true pour considérer la réponse pour la compression, ou false pour ne pas compresser
la réponse.
La fonction de filtre par défaut utilise le module compressible
pour déterminer si res.getHeader('Content-Type') est compressible.
niveau
Type: Number
Par défaut: zlib.constants.Z_DEFAULT_COMPRESSION, ou -1
Le niveau de compression zlib à appliquer aux réponses. Un niveau plus élevé donnera en meilleure compression, mais prendra plus de temps à compléter. Un niveau inférieur entraînera moins de compression, mais sera beaucoup plus rapide.
Ceci est un entier dans la plage de 0 (pas de compression) à 9 (compression
maximale). La valeur spéciale -1 peut être utilisée pour signifier le “niveau de compression par défaut
”, qui est un compromis par défaut entre la vitesse et la compression
(actuellement équivalent au niveau 6).
-1Niveau de compression par défaut (égalementzlib.constants.Z_DEFAULT_COMPRESSION).0Aucune compression (égalementzlib.constants.Z_NO_COMPRESSION).1Compression la plus rapide (égalementzlib.constants.Z_BEST_SPEED).23456(actuellement ce quezlib.constants.Z_DEFAULT_COMPRESSIONpointe).789Meilleure compression (égalementzlib.constants.Z_BEST_COMPRESSION).
Note dans la liste ci-dessus, zlib est de zlib = require('zlib').
memLevel
Type: Number
Par défaut: zlib.constants.Z_DEFAULT_MEMLEVEL, ou 8
Cela spécifie combien de mémoire doit être allouée pour l’état interne de compression
et est un entier dans la plage de 1 (niveau minimum) et 9 (niveau
maximum).
Voir la documentation de Node.js concernant l’utilisation.
brotli
Type: Objet
Ceci spécifie les options de configuration de Brotli. Voir la documentation de Node.js pour une liste complète des options disponibles.
Stratégie
Type: Number
Par défaut: zlib.constants.Z_DEFAULT_STRATEGY
Ceci est utilisé pour régler l’algorithme de compression. Cette valeur n’affecte que le ratio de compression et non la justesse de la sortie compressée, même si n’est pas défini de manière appropriée.
zlib.constants.Z_DEFAULT_STRATEGYUtiliser pour les données normales.zlib.constants.Z_FILTEREDUtiliser pour les données produites par un filtre (ou prédicteur). Filtered data consists mostly of small values with a somewhat random distribution. Dans ce cas, l’algorithme de compression est réglé sur comprime mieux. L’effet est de forcer plus de codage Huffman et moins de chaînes de caractères ; il est quelque peu intermédiaire entrezlib.constants.Z_DEFAULT_STRATEGYetzlib.constants.Z_HUFFMAN_ONLY.zlib.constants.Z_FIXEDUse to prevent the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.zlib.constants.Z_HUFFMAN_ONLYUtilisez pour forcer l’encodage Huffman uniquement (pas de correspondance de chaînes).zlib.constants.Z_RLEUtilisez pour limiter les distances à une (encodage de longueur d’exécution). This is designed to be almost as fast aszlib.constants.Z_HUFFMAN_ONLY, but give better compression for PNG image data.
Note dans la liste ci-dessus, zlib est de zlib = require('zlib').
seuil
Type: Number ou String
Par défaut: 1kb
Le seuil d’octets pour la taille du corps de la réponse avant la compression est considéré comme pour la réponse. Ceci est un nombre d’octets ou n’importe quelle chaîne acceptée par le module bytes.
Note il ne s’agit que d’un paramètre d’alerte; si la taille de la réponse ne peut pas être déterminée
au moment où les en-têtes de réponse sont écrits, alors il est supposé que la réponse est
sur le seuil. Pour garantir que la taille de la réponse peut être déterminée, assurez-vous que
définisse un en-tête de réponse Content-Length.
Bits de fenêtre
Type: Number
Par défaut: zlib.constants.Z_DEFAULT_WINDOWBITS, ou 15
Voir la documentation de Node.js concernant l’utilisation.
Encodage de l’application
Type: String
Par défaut: identity
C’est l’encodage par défaut à utiliser lorsque le client ne spécifie pas d’encodage dans l’en-tête Accept-Encoding de la requête.
Filtre
La fonction par défaut filter. Ceci est utilisé pour construire une fonction de filtre
personnalisée qui est une extension de la fonction par défaut.
var compression = require('compression');var express = require('express');
var app = express();
app.use(compression({ filter: shouldCompress }));
function shouldCompress(req, res) { if (req.headers['x-no-compression']) { // don't compress responses with this request header return false; }
// fallback to standard filter function return compression.filter(req, res);}vider
Ce module ajoute une méthode res.flush() pour forcer la réponse
partiellement compressée à être vidée au client.
Exemples
exprès
Lorsque vous utilisez ce module avec des express, il suffit de app.use le module à la hauteur de
que vous voulez. Les requêtes qui passent par le middleware seront compressées.
var compression = require('compression');var express = require('express');
var app = express();
// compress all responsesapp.use(compression());
// add all routesServeur HTTP Node.js
var compression = require('compression')({ threshold: 0 });var http = require('http');
function createServer(fn) { return http.createServer(function (req, res) { compression(req, res, function (err) { if (err) { res.statusCode = err.status || 500; res.end(err.message); return; }
fn(req, res); }); });}
var server = createServer(function (req, res) { res.setHeader('Content-Type', 'text/plain'); res.end('hello world!');});
server.listen(3000, () => { console.log('> Listening at http://localhost:3000');});Événements envoyés par le serveur
En raison de la nature de la compression, ce module ne fonctionne pas dans la boite avec les événements envoyés par le serveur. To compress content, a window of the output needs to be buffered up in order to get good compression. Typically when using server-sent events, there are certain block of data that need to reach the client.
Vous pouvez y parvenir en appelant res.flush() quand vous avez besoin des données écrites à
en réalité le faire au client.
var compression = require('compression');var express = require('express');
var app = express();
// compress responsesapp.use(compression());
// server-sent event streamapp.get('/events', function (req, res) { res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache');
// send a ping approx every 2 seconds var timer = setInterval(function () { res.write('data: ping\n\n');
// !!! this is the important part res.flush(); }, 2000);
res.on('close', function () { clearInterval(timer); });});Contribuer
Le projet Express.js salue toutes les contributions constructives. Les contributions prennent plusieurs formes, du code pour les corrections de bugs et les améliorations, aux ajouts et corrections à la documentation, tests supplémentaires, triant les demandes de fusion entrantes et les problèmes, et plus encore !
Voir le [Guide de contribution] (https://github.com/expressjs/express/blob/master/Contributing.md) pour plus de détails techniques sur la contribution.