Node.js:Gzip压缩?

我发现Node.js没有gzip压缩,并且没有模块可以执行gzip压缩吗? 任何人都可以使用一个没有压缩的Web服务器? 我在这里错过了什么? 我是否应该尝试将algorithm引入JavaScript以供服务器端使用?

这里列出了压缩 模块的数量:

Node v0.6.x现在在核心中有一个稳定的zlib模块 – 在文档中也有一些如何在服务器端使用它的例子。

一个例子(摘自文档):

// server example // Running a gzip operation on every request is quite expensive. // It would be much more efficient to cache the compressed buffer. var zlib = require('zlib'); var http = require('http'); var fs = require('fs'); http.createServer(function(request, response) { var raw = fs.createReadStream('index.html'); var acceptEncoding = request.headers['accept-encoding']; if (!acceptEncoding) { acceptEncoding = ''; } // Note: this is not a conformant accept-encoding parser. // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 if (acceptEncoding.match(/\bdeflate\b/)) { response.writeHead(200, { 'content-encoding': 'deflate' }); raw.pipe(zlib.createDeflate()).pipe(response); } else if (acceptEncoding.match(/\bgzip\b/)) { response.writeHead(200, { 'content-encoding': 'gzip' }); raw.pipe(zlib.createGzip()).pipe(response); } else { response.writeHead(200, {}); raw.pipe(response); } }).listen(1337); 

如果您使用Express ,则可以使用其压缩方法作为configuration的一部分:

 var express = require('express'); var app = express.createServer(); app.use(express.compress()); 

你可以在这里find更多关于压缩: http : //expressjs.com/api.html#compress

如果你不使用快递 …为什么不呢,男人? 🙂

注意:(感谢@ankitjaininfo)这个中间件应该是你“使用”的第一个,以确保所有的响应都被压缩。 确保这是在你的路线和静态处理程序之上(例如,我如何拥有它)。

注意:(感谢@ ciro-costa)自express4.0以来, express.compress中间件已被弃用。 它从连接3.0inheritance,并且不再包含连接3.0。 检查Express Compression获取中间件。

1-安装压缩

 npm install compression 

2-使用它

 var express = require('express') var compression = require('compression') var app = express() app.use(compression()) 

在Github上压缩

一般来说,对于生产Web应用程序,您将需要将您的node.js应用程序放在轻量级逆向代理(如nginx或lighttpd)后面。 在这个设置的许多好处中,您可以configuration反向代理进行http压缩,甚至是压缩,而不必更改应用程序源代码。

虽然可以使用反向代理(如nginx,lighttpd或varnish)来进行gzip压缩。 在应用程序级别使用大多数http优化(例如gzip)是非常有益的,这样您就可以对哪些资源进行gzip有更细化的方法。

我已经创build了自己的expressjs / connect gzip模块,名为gzippo https://github.com/tomgco/gzippo,尽pipe新增了它的function。; 另外,它使用节点压缩而不是产生unix gzip命令。

这个怎么样?

节点压缩
用于node.js的stream式压缩/ gzip模块
要安装,请确保已安装libz,然后运行:
node-wafconfiguration
node-waf构build
这将把compress.node二进制模块放在build / default中。

正如其他人正确指出的那样,使用像nginx这样的前端Web服务器可以隐式处理这个问题,另一种select是使用nodejitsu的优秀节点-http-proxy来提供资源。

例如:

 httpProxy.createServer( require('connect-gzip').gzip(), 9000, 'localhost' ).listen(8000); 

这个例子演示了如何使用连接中间件模块来支持gzip压缩: connect-gzip

节点已经过了好几天了,你说的没有gzip就不能创build一个web服务器。

Node.js Wiki上的模块页面上有很多选项。 我尝试了大部分,但这是我最终使用的 –

https://github.com/donnerjack13589/node.gzip

v1.0也出来了,到目前为止一直很稳定。

截至今天,epxress.compress()似乎在这方面做得非常出色。

在任何快速的应用程序只是调用this.use(express.compress()); 我在express上运行机车,这是美好的。 我不能跟任何其他的图书馆或build立在快递上的框架说话,但只要他们尊重整个堆栈的透明度,你应该没问题。

即使你不使用快递,你仍然可以使用他们的中间件。 压缩模块是我正在使用的:

 var http = require('http') var fs = require('fs') var compress = require("compression") http.createServer(function(request, response) { var noop = function(){}, useDefaultOptions = {} compress(useDefaultOptions)(request,response,noop) // mutates the response object response.writeHead(200) fs.createReadStream('index.html').pipe(response) }).listen(1337) 

为了压缩文件,你可以使用下面的代码

 var fs = require("fs"); var zlib = require('zlib'); fs.createReadStream('input.txt').pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz')); console.log("File Compressed."); 

对于解压缩相同的文件,你可以使用下面的代码

 var fs = require("fs"); var zlib = require('zlib'); fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt')); console.log("File Decompressed."); 

Express,KOA等有多个Gzip中间件。 例如: https : //www.npmjs.com/package/express-static-gzip

但是,Node在执行CPU密集型任务(如gzipping,SSL终止等)时非常糟糕,而是使用像nginx或HAproxy这样的“真正的”中间件服务,请参阅第3项: http ://goldbergyoni.com/checklist-best- 实践的节点-JS-在生产/