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?
Connect 2. a ajouté le support pour compress () middleware basé sur le nouveau truc zlib avec qui vient de sortir dans Node API principale.
Vous pouvez l'utiliser dans votre serveur express en ajoutant une dépendance pour vous connecter 2.0 dans votre package.json
fichier:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
Et 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 nouveau et même si je pouvais le faire fonctionner localement, mon Herok application cloud se plaignait de la dépendance de Compress 2.x lors du hook de pré-validation 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).
MISE À JOUR:
En fait, je pouvais demander à Heroku de le déployer en ajoutant la section engines
correspondante dans le package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
Et voici les résultats lors de l'utilisation d'un testeur de compression http:
MISE À JOUR juin 2014
Salut, si vous lisez ceci maintenant. N'oubliez pas que les éléments ci-dessus ne concernent que Express 2.0.
Express 3.0 et 4.0 utilisent une syntaxe différente pour activer la compression http, voir l'article de gasolin juste en dessous.
Express 3.0 prend désormais en charge compress ():
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
MODIFIER pour Express 4.0, compresser devient le middleware séparé. Vous devez donc installer et importer pour l'utiliser:
var compress = require('compression');
app.use(compress());
J'ai également recherché npm et trouvé par exemple:
https://github.com/tomgallacher/gzippo
gzippo prononcé g-zippo est un middleware gzip pour Connect utilisant Compress pour de meilleures performances.
Gzippo a été récemment développé (il y a 2 jours), ce qui, je pense, est une bonne chose. Je ne peux pas vous parler de l'utilisation de la production. Vous devez le tester/comparer vous-même. J'utiliserais également probablement un CDN pour un site en direct ou Nginx pour héberger mes fichiers statiques au lieu d'un module nodejs.
Connect prendra en charge les nouveaux éléments zlib dans Node dans la prochaine version
Si vous avez recherché le npm, vous avez peut-être rencontré node-compress .
Il ne devrait pas être trop difficile de l'injecter en tant que middleware dans express.