【问题标题】:gzip and minify server route response in meteor and iron-routergzip 和缩小流星和铁路由器中的服务器路由响应
【发布时间】:2015-04-01 19:20:10
【问题描述】:

我使用 Meteor 和 Iron-router 并设置了许多服务器路由以返回一些带有 Node.js 响应对象的 HTML。

现在我想缩小并启用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 支持。

【问题讨论】:

标签: javascript node.js meteor httpresponse iron-router


【解决方案1】:

Meteor 已经压缩并缩小(在生产模式下)您的应用程序。

为了不引起混淆,您的主应用文件 根文件 xxx.meteor.com 不受此影响(包含类似于 index.html 的 HTML)。 p>

此外,这个 index.html LIKE 文件是包含对您的 js 和 css 文件的引用的裸文件。包含应用程序 HTML 的实际 js 文件确实也经过 gzip 压缩。

您的其余静态资产(css、js、图像等)都是 gzipd。

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

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

另一方面

网页是否已压缩:http://test.meteor.com/5166d4fcc07e1605cbe979ef217942271d8badac.js 为是

网页是否被压缩:NO for (http://test.meteor.com)

对于使用 Iron 路由器的自定义服务器端渲染路由,您可以通过包含带有 Router.onBeforeAction 的中间件而不是带有您选择的压缩中间件 (nodejs) 的 app.use 来 gzip 文件。

【讨论】:

  • 感谢您的关注,我从您的回答中了解了很多关于流星中 gzip 条件的信息,但是缩小呢?当我自己使用响应对象而不是普通的流星功能时,如何缩小我的 html 结果?
  • @b24 html 是静态资源。 Meteor 在构建过程中缩小了这些。 “按需”缩小它们可能不值得,因为这会浪费您的服务器资源。在将其投入生产之前,在源代码中缩小 var html 中的字符串。这样就不必在每个请求上都缩小它。
  • 是的,这是正确的,但上面的代码只是一个示例。我的var html 内容是动态的,我无法在制作前缩小它。我需要一个自动解决方案来缩小我的响应,因为流星不会缩小这个。
  • @b24 您可以将原始 html 存储在项目根目录的 private 目录中,并使用 Assets.getText() 访问它。您可以使用 npm 模块 html-minifier 来缩小文件吗?不幸的是,没有“流星”解决方案,因为官方服务器端渲染仍在路线图上@roadmap.meteor.com
  • html-minifier 非常棒,对我来说效果很好。谢谢。
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2015-08-11
  • 2016-01-22
相关资源
最近更新 更多