快速和连接似乎已经删除了他们的gzip功能,因为它们效率太低。目前有没有可靠的解决方案来使用express-j进行gzip?快速gzip静态内容
回答
Connect 2.0增添基础上,new zlib stuff与在节点核心API刚出来的compress()中间件的支持。
您可以通过添加依赖连接2.0在package.json
文件在您的Express服务器使用本:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
,然后应用以下逻辑到您的快递应用配置:
// 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);
请注意,这东西仍然是非常新的,虽然我可以让它在本地工作,但我的Heroku云应用程序抱怨对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: [email protected]'>=2.0.0- <3.0.0-'
正如你可以看到,他们还在使用旧版本节点(0.4.7):在通过git的部署时,pre-commit钩子。
UPDATE:
其实,我能得到的Heroku通过增加在package.json
相应engines
部分部署此:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
而且这些都是使用时的结果HTTP压缩测试仪:
UPDATE 2014年6月
你好,如果你正在阅读这一点。不要忘记,上面的东西只与Express 2.0相关。
Express 3.0和4.0使用不同的语法来启用http压缩,请参阅下面的gasolin文章。
我无法使其在Express 2.5.1上工作。 – 2012-05-21 17:36:24
@AndreyLushnikov:你必须在**'static'之前使用()''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()'调用。 – josh3736 2012-07-22 01:49:51
@gasolin表示Express 3.0现在具有'compress()'支持。如果您正在阅读本文,请您更新您的答案? – HyderA 2013-03-10 15:26:12
如果你已经搜索了npm,你可能会遇到node-compress。
把它作为中间件注入express应该不会太难。
我也搜索NPM,发现例如:
https://github.com/tomgallacher/gzippo
gzippo明显gzippo是使用压缩 有更好的表现一个gzip 中间件连接。
Gzippo最近开发(2天前)我认为这是一件好事。我无法告诉你有关生产的用法。你应该自己测试/基准测试。我也可能使用CDN作为活动站点或Nginx来托管我的静态文件,而不是一些nodejs模块。
我们正在使用gzippo制作大型英国报纸。在节点层配置内容压缩的好处在于,您可以简单地将Varnish,Squid或CDN放在上游,它将遵守http标头,并在代理/ CDN上为所有后续请求保留一个缓存压缩副本。这使得您的节点代码和您的git/svn等缓存配置。 – serby 2011-07-03 16:28:42
连接将支持节点的新zlib的东西在下一个版本
它现在被添加,请参阅下面的帖子.. – 2012-03-18 00:32:43
快车3.0现在已经压缩()的支持:
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
编辑 的快递4.0,压缩成为单独的中间件。所以,你必须安装和进口使用它:
var compress = require('compression');
app.use(compress());
Express'4.x'几乎删除了所有中间件,包括'compress'。您现在可以使用Connect的'compression'中间件:https://github.com/expressjs/compression。 – 2014-04-18 01:55:34
是否需要在heroku中执行额外的步骤 – 2015-03-22 14:42:19
在什么情况下压缩触发器?我刚刚添加了它,但写了'res.send',没有压缩的内容出来。它是否需要'res.end'或其他触发器? – CMCDragonkai 2015-04-26 05:01:25
- 1. Nodejs快速会话 - 不加载静态内容的会话?
- 2. 快速更新WildFly服务器上的静态内容
- 3. 服务*与快递静态gzip
- 4. 静态内容
- 5. 静态内容
- 6. 快速gzip压缩问题
- 7. 快速解析内容PARAMS
- 8. Html.dropdownlist静态内容
- 9. 在快速应用程序中避免静态内容的中间件
- 10. 快速捕获除静态内容(如css和js)以外的所有路由
- 11. 快速引用静态方法
- 12. Python快速静态文件服务
- 13. 快速静态持久哈希表
- 14. nodejs与快速静态文件挂起
- 15. 静态方法快速自我
- 16. bower_components未加载快速静态
- 17. 快速静态文件没有更新
- 18. 快速静态服务走错了路
- 19. javascript not loading使用快速静态
- 20. Nodejs和快速静态视图路由
- 21. 如何更改快速静态目录?
- 22. 使用symfony2 gzip compress动态内容
- 23. ngx_pagespeed - Gzip静态资产
- 24. 在PHP中快速查询相关内容的快速问题!
- 25. 静态内容在Django
- 26. 服务静态内容
- 27. Jetty.xml访问静态内容
- 28. nginx重写静态内容
- 29. ASP.NET MVC:静态内容
- 30. 处理静态内容(CSS)
使用的nginx的gzip的 – dumitru 2015-05-21 07:10:20
如果这仍然是相关的人:因为我想成为gziped静态文件,但不希望在这样的开销fly,我在express.static之上写了一个小包装,它允许提供已经准备好的gziped文件。如果您将gzipping html/css/js文件集成到您的构建过程中,这将非常有用。模块可以在npm上找到:[express-static-gzip](https://www.npmjs.com/package/express-static-gzip) – Tobi 2016-11-02 07:32:44