2015-04-01 181 views
0

我使用了Meteor和Iron-router,并设置了许多服务器路由来返回一些带有Node.js响应对象的HTML。在流星和铁路路由器中gzip和minify服务器路由响应

现在我想要minify并且还启用gzip作为回应。 如何做到这一点?

这是我的路线代码:

Router.route('/', function() { 
    var res = this.response; 
    var html = "<!DOCTYPE html>\n" + 
     "<html>\n" + 
     " <head>\n" + 
     " </head>\n" + 
     " <body>\n" + 
     "  test\n" + 
     " </body>\n" + 
     "</html>"; 
    res.end(html); 
}, { where: 'server' }); 

这是第结果:

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
     test 
    </body> 
</html> 

我想缩小的版本,象下面这样:

<!DOCTYPE html><html><head></head><body>test</body></html> 

我在这个URL部署测试项目:

http://gzipminify.meteor.com/

而且您可以使用this tools测试gzip支持。

+1

你应该在你的Node应用程序前面使用nginx:https://www.yauh.de/do-i-really-need-nginx-with-my-meteornode-js-app/ – saimeunt 2015-04-01 11:03:34

回答

2

流星已经gzips和缩小(在生产模式)你的应用程序。

只是不引起混淆你的主应用程序文件根文件可在xxx.meteor.com不受此影响(包含HTML类似index.html中的一个)。

此外index.html LIKE文件是裸露的一个包含对您的js & css文件的引用。包含应用程序HTML的实际js文件实际上也是经过压缩的。

其余的静态资产(CSS,JS,图像等)都是gzipd。

在生产模式下,您的css & js也被缩小。

您在gzipminify.meteor.com的网站没有静态资产,也没有CSS。

在另一方面

是Web页面压缩:为http://test.meteor.com/5166d4fcc07e1605cbe979ef217942271d8badac.js

是被压缩的网页:否(http://test.meteor.com

对于铁路由器定制的服务器端渲染路径您可以通过包含中间件Router.onBeforeAction而不是app.use与您选择的压缩中间件(nodejs)进行gzip文件压缩。

+0

谢谢你的注意,我从你的答案中学到了很多关于流星中gzip条件的事情,但是缩小呢?当我使用响应对象而不是普通的流星功能时,如何缩小我的html结果? – b24 2015-04-02 08:21:18

+0

@ b24 html是一个静态资源。流星在构建过程中对这些进行了缩小。它可能不值得将它们“按需”缩小,因为这会浪费您的服务器资源。在投入生产之前,在源代码中将'var html'中的字符串缩小。这样就不必在每个请求中都缩小。 – Akshat 2015-04-02 08:29:15

+0

是的,它是正确的,但上面的代码只是一个例子。我的'var html'内容是动态的,我无法在生产之前将其缩小。我需要一个自动解决方案来缩小我的反应,因为流星不会缩小这个。 – b24 2015-04-02 08:44:49