快递gzip静态内容

Hyd*_*erA 38 javascript gzip node.js express

Express和connect似乎已经删除了他们的gzip函数,因为它们效率太低.目前有没有可靠的gzip与express-js的解决方案?

gas*_*lin 82

Express 3.0现在支持compress():

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

编辑 Express 4.0,压缩成为独立的中间件.所以你必须安装并导入才能使用它:

var compress = require('compression');
app.use(compress()); 
Run Code Online (Sandbox Code Playgroud)

  • Express`4.x`删除了几乎所有的中间件,包括`compress`.您现在可以使用Connect的`compression`中间件:https://github.com/expressjs/compression. (9认同)
  • 当您想使用Express 4.x压缩静态文件时,不要忘记添加{threshold:0} (3认同)

Ste*_*las 31

Connect 2.0增加了对基于新的zlib内容的compress()中间件的支持,这些内容刚刚在Node Core API中出现.

您可以通过在package.json文件中添加连接2.0来在快速服务器中使用它:

{
    ...
    dependencies: {
        "connect" : "2.x",
        "express" : "2.x",
        // etc..
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将以下逻辑应用到您的快速应用配置中:

// 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);
Run Code Online (Sandbox Code Playgroud)

请注意,这些东西仍然是新的,虽然我可以让它在本地工作,我的Heroku云应用程序抱怨在通过git部署时在预提交钩子期间对Compress 2.x的依赖:

-----> 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-'
Run Code Online (Sandbox Code Playgroud)

如您所见,他们仍在使用旧版本的节点(0.4.7).


更新:

实际上,我可以通过添加相应的engines部分来让Heroku部署它package.json:

{
    ...
    "engines": {
        "node": ">= 0.6.0 < 0.7.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是使用http压缩测试仪时的结果:

在此输入图像描述

更新2014年6月

你好,如果你现在正在读这篇文章.别忘了上面的内容只与Express 2.0有关.

Express 3.0和4.0使用不同的语法来启用http压缩,请参阅下面的gasolin帖子.

  • @gasolin在下面表示Express 3.0现在具有`compress()`支持.如果你正在读这篇文章,请你更新你的答案吗? (3认同)
  • @AndreyLushnikov:你必须在**`static`之前`use()``compress`**.`compress` [替换](https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)`res.write`和`res.end`以便它可以通过zlib代理数据.如果`static`在`compress`之前,它会在`compress`中间件有机会运行并修补`res`方法之前处理整个请求.史蒂文,我已经更新了你的回答来交换`use()`调用. (2认同)
  • 你是怎么做http压缩测试仪的? (2认同)

Alf*_*red 5

我也搜索了npm并找到了例如:

最近开发了Gzippo(2天前),我认为这是一件好事.我无法告诉你有关生产用途的信息.你应该自己测试/基准测试.我也可能使用CDN作为实时站点或Nginx来托管我的静态文件而不是某些nodejs模块.

  • 我们正在为一家大型英国报纸制作gzippo.在节点层中配置内容压缩的好处是,您可以简单地将Varnish,Squid或CDN放在上游,它将遵循http标头并在代理/ CDN上保留缓存的压缩副本以用于所有后续请求.这使缓存配置与您的节点代码和git/svn等保持一致. (5认同)