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 ?
Réponses
Trop de publicités?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());
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 :
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.
J'ai également cherché dans npm et trouvé par exemple :
-
https://github.com/tomgallacher/gzippo
gzippo prononcé g-zippo est un intergiciel gzip pour Connect utilisant Compress pour de meilleures performances.
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.
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.