Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express gzip static content

Express and connect appeared to have removed their gzip functions because they were too inefficient. Are there any reliable solutions to gzip with express-js currently?

like image 826
HyderA Avatar asked Jun 16 '11 10:06

HyderA


2 Answers

Express 3.0 now has compress() support:

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

EDIT for Express 4.0, compress become the separate middleware. So you have to install and import to use it:

var compress = require('compression'); app.use(compress());  
like image 154
gasolin Avatar answered Oct 07 '22 18:10

gasolin


Connect 2.0 has added support for compress() middleware based on the new zlib stuff with that has just come out in Node Core API.

You can make use of this in your express server by adding a dependency to connect 2.0 in your package.json file:

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

And then apply the following logic into your express app configuration:

// 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); 

Please note that this stuff is still pretty new and while I could get it to work locally, my Heroku cloud application complained about the dependency on Compress 2.x during the pre-commit hook when deploying 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-' 

As you can see, they're still using an old version of node (0.4.7).


UPDATE:

Actually, I could get Heroku to deploy this by adding the corresponding engines section in the package.json:

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

And these are the results when using a http compression tester:

enter image description here

UPDATE June 2014

Hiya, if you are reading this now. Dont forget that the stuff above is only relevant to Express 2.0.

Express 3.0 and 4.0 use different syntax for enabling http compression, see post by gasolin just below.

like image 23
Steven de Salas Avatar answered Oct 07 '22 19:10

Steven de Salas