web-dev-qa-db-fra.com

Contenu statique gzip express

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?

38
HyderA

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:

enter image description here

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.

31
Steven de Salas

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()); 
81
gasolin

J'ai également recherché npm et trouvé par exemple:

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.

5
Alfred

Connect prendra en charge les nouveaux éléments zlib dans Node dans la prochaine version

3
tjholowaychuk

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.

1
Raynos