我发现Node.js没有gzip压缩,也没有模块可以执行gzip压缩,这是不是错了?任何人如何使用没有压缩的web服务器?这里我漏掉了什么?我是否应该尝试将算法移植到JavaScript以供服务器端使用?
发布于 2012-02-11 13:56:44
Node v0.6.x现在在核心中有一个稳定的zlib module -文档中也有一些关于如何在服务器端使用它的例子。
下面是一个示例(取自文档):
// 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);
发布于 2013-01-15 23:48:12
如果你使用的是Express,那么你可以在配置中使用它的compress方法:
var express = require('express');
var app = express.createServer();
app.use(express.compress());
你可以在这里找到更多关于压缩的内容:http://expressjs.com/api.html#compress
如果你没有使用Express..。为什么不呢,伙计?!:)
注意:(感谢@ankitjaininfo)这个中间件应该是您“使用”的第一个中间件,以确保所有响应都是压缩的。确保这高于您的路由和静态处理程序(例如,上面我是如何拥有它的)。
注意:(感谢@ciro-costa)从express 4.0开始,express.compress
中间件就被弃用了。它是从Connect3.0继承而来的,express不再包含Connect3.0。检查Express Compression以获取中间件。
发布于 2010-10-09 07:04:01
一般来说,对于生产web应用程序,您会希望将您的node.js应用程序放在一个轻量级反向代理后面,例如nginx或lighttpd。在此设置的众多好处中,您可以配置反向代理来执行http压缩,甚至tls压缩,而不必更改应用程序源代码。
https://stackoverflow.com/questions/3894794
复制相似问题