38 votes

Express gzip content statique

Express et connect semblent avoir supprimé leurs fonctions gzip car elles étaient trop inefficaces. Existe-t-il actuellement des solutions fiables pour gzip avec express-js ?

82voto

gasolin Points 839

Express 3.0 a maintenant le support de compress() :

var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);

EDITAR pour Express 4.0, compress est devenu un middleware séparé. Vous devez donc l'installer et l'importer pour l'utiliser :

var compress = require('compression');
app.use(compress());

31voto

Steven de Salas Points 4611

Connect 2.0 a ajouté un support pour compresser() intergiciel basé sur le nouveaux trucs zlib avec ce qui vient de sortir dans Node Core API.

Vous pouvez en faire usage dans votre serveur express en ajoutant une dépendance à connect 2.0 dans votre fichier package.json fichier :

{
    ...
    dependencies: {
        "connect" : "2.x",
        "express" : "2.x",
        // etc..
    }
}

Puis, appliquez la logique suivante dans la configuration de votre application express :

// Create static file server with gzip support
var app = express.createServer(express.logger());
app.use(connect.compress());
app.use(express.static(__dirname + '/public'));
app.listen(80);

Veuillez noter que ce truc est encore assez récent et bien que j'aie pu le faire fonctionner localement, ma Heroku Une application en nuage s'est plainte de la dépendance à Compress 2.x pendant le crochet de pré-commit lors du déploiement via git :

-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.4.7
       Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       npm ERR! Error: No compatible version found: connect@'>=2.0.0- <3.0.0-'

Comme vous pouvez le voir, ils utilisent toujours une ancienne version de node (0.4.7).


UPDATE :

En fait, j'ai pu faire en sorte que Heroku déploie ceci en ajoutant l'élément correspondant engines dans la section package.json :

{
    ...
    "engines": {
        "node": ">= 0.6.0 < 0.7.0"
    }
}

Et voici les résultats obtenus en utilisant un testeur de compression http :

enter image description here

MISE À JOUR juin 2014

Salut, si vous lisez ceci maintenant. N'oubliez pas que les informations ci-dessus ne concernent que l'Express 2.0.

Express 3.0 et 4.0 utilisent une syntaxe différente pour activer la compression http, voir le post de gasolin juste en dessous.

5voto

Alfred Points 32190

J'ai également cherché dans npm et trouvé par exemple :

Gzippo a été développé récemment (il y a 2 jours), ce qui est une bonne chose. Je ne peux pas vous parler de l'utilisation en production. Vous devriez le tester/benchmarker vous-même. J'utiliserais aussi probablement un CDN pour un site en direct ou Nginx pour héberger mes fichiers statiques plutôt qu'un module nodejs.

3voto

tjholowaychuk Points 1320

Connect supportera les nouvelles fonctionnalités zlib de Node dans la prochaine version.

1voto

Raynos Points 82706

Si vous avez cherché dans le npm vous avez peut-être rencontré node-compress .

Il ne devrait pas être trop difficile de l'injecter comme intergiciel dans express.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X