【问题标题】:Compress components with gzip - Java EE使用 gzip 压缩组件 - Java EE
【发布时间】:2011-01-22 16:11:24
【问题描述】:

我希望提高我的应用程序的前端性能,所以我在 Firefox 中使用了 YSlow 工具。当我为我的应用程序运行此工具时,在 YSlow 等级选项卡中,它显示了一个问题“使用 gzip 压缩组件的等级 F”。似乎是我们需要在从服务器发送到客户端时压缩文件(js,css)以增加服务器响应时间。

我的应用程序是一个 Struts Java 应用程序。谁能让我知道如何从服务器压缩和发送前端 UI 文件(JS、CSS),以便响应时间增加并且我的页面快速很多?在服务器上用 Java 压缩这些文件需要做什么?

【问题讨论】:

  • 你使用的是什么 servlet 容器? - 你可以例如将 Tomcat 配置为即时执行 gzip。

标签: java jakarta-ee struts gzip yslow


【解决方案1】:

为了提高 Java EE Web 应用程序的客户端性能,WebUtilities java 库会很有帮助。

这里是链接::https://github.com/rpatil26/webutilities

也是available through maven central

从 0.0.4 版开始,它有助于遵循性能实践。

  1. 最小化 HTTP 请求 - 可以在一个请求中处理多个 JS/CSS 文件
  2. 客户端缓存 - 添加适当的 Cache-Control、Expires 标头
  3. 动态 JS/CSS 缩小 - 使用 YUICompressor
  4. 压缩 - 支持 gzip/deflate/compress 编码的 2way 压缩
  5. 服务器上的响应缓存 - 避免重新处理未更改的资源
  6. 添加字符编码 - 让浏览器提前知道

【讨论】:

    【解决方案2】:

    我推荐使用 Granule Tag lib http://code.google.com/p/granule/

    它 gzip 并结合 g:compress 标签包裹的 j​​avascripts

    代码示例是:

    goog.require('goog.dom'); goog.require('goog.date'); goog.require('goog.ui.DatePicker'); 脚本> 压缩> ...

    【讨论】:

      【解决方案3】:

      您确定要压缩 JS 和 CSS 而不是压缩它吗?通常 JS 和 CSS 在第一次访问后被浏览器缓存,前提是您的缓存标头由您的 Web 服务器正确设置。在实践中,我发现缩小 JS 和 CSS 通常足以满足浏览器的初始下载。

      有很多 JS 缩小器。例如一个位于here

      【讨论】:

        【解决方案4】:

        您通常在 appserver/servletcontainer 级别对其进行配置。我不知道您使用的是哪一个,所以这里只是一个Tomcat 目标示例。在/conf/server.xml中配置<Connector>组件如下:

        <Connector compression="on">
        

        就是这样。只需添加compression="on"。其他服务器提供了类似的设置。有关详细信息,请参阅其文档。通常情况完全相同,因为它们是建立在 Tomcat 之上的。

        有关 Java EE Web 应用程序透视图中的更多 YSlow 提示,您可能会发现此 blog article 更有用。

        【讨论】:

        • 我试过在这篇文章中提到balusc.blogspot.com/2009/02/…。但是 YSlow 仍然显示文件(JS,CSS)不是从服务器以压缩模式发送的。任何想法/建议表示赞赏。谢谢
        • 你不会混淆压缩和缩小吗?
        • 是的,我认为这里我们需要压缩 js、css 文件并将其从服务器发送到客户端。如果我的理解是错误的,请指出我。
        • 这很难说,因为我无法访问您的环境,而且您显然无法自己检查/验证工作。
        • 正如我之前所说,虽然我在服务器上进行了压缩,但我仍然能够在 YSlow 中看到“使用 gzip 压缩组件的 F 级”。无论如何从服务器实现gzip压缩(JS,CSS)文件。
        【解决方案5】:

        我建议使用Servlet Filter(因为 servlet 2.3 规范)

        gzip 过滤器有据可查,因此无需重新发明轮子:

        此外,一些 servlet 容器可以即时执行 gzip。看看this related question

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-14
          • 2012-10-16
          • 2012-06-17
          相关资源
          最近更新 更多