`
唯快不破
  • 浏览: 83017 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

使用Cache-Control和gzip提升tomcat应用性能(整理)

阅读更多
这个其实应该是常识,只不过以前做的J2EE应用大部分是内网里跑的东西,所以性能上没什么问题。这次APIS由于有在外面用的可能,加上使用了一些比较大的javascript框架(Ext),所以性能问题瞬间窜了上来。
以前做的J2EE应用没有使用上达500K的框架,最多就是几十K的Prototype,所以没什么问题。一个页面一般也就几十K最多了。但这次还在开发中的APIS,由于还在用debug版本的库,所以单单Ext就膨胀到了一个多M,加上不知道是Struts还是Tomcat默认写入Response的cache-control: no cache,在远程用起来就很慢,一般一个页面需要十多秒种甚至更久,实在无法忍受。前几天集中解决了问题。
    首先是Cache-Control的问题,Google了好一阵,没有什么直接配置的方法,只好自己抄了一个一个Filter,通过和web.xml里配置的配合勉强凑合着用。一般就是对*.do实施no-cache政策,其他需要缓存的img, js文件,统统加上长达两周的缓存期限。ETag实在不会用,就先用这个缓存策略吧。

Filter的代码:

public class ResponseHeaderFilter implements Filter {
    FilterConfig fc; 

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        // set the provided HTTP response parameters
        for (Enumeration e = fc.getInitParameterNames(); e.hasMoreElements();) {
            String headerName = (String) e.nextElement();
            response.addHeader(headerName, fc.getInitParameter(headerName));
        }
        // pass the request/response on
        chain.doFilter(req, response);
    } 

    public void init(FilterConfig filterConfig) {
        this.fc = filterConfig;
    } 

    public void destroy() {
        this.fc = null;
    } 

}





web.xml里的巧妙配置:

<filter>
        <filter-name>NoCache</filter-name>
        <filter-class>apis.server.common.util.ResponseHeaderFilter</filter-class>
        <init-param>
            <param-name>Cache-Control</param-name>
            <param-value>no-cache, must-revalidate</param-value>
        </init-param>
    </filter>
    <filter>
        <filter-name>CacheForWeek</filter-name>
        <filter-class>apis.server.common.util.ResponseHeaderFilter</filter-class>
        <init-param>
            <param-name>Cache-Control</param-name>
            <param-value>max-age=604800, public</param-value>
        </init-param>
    </filter>

<filter-mapping>
        <filter-name>NoCache</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>/images/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>/img/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>/icons/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>/ext/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>*.js</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CacheForWeek</filter-name>
        <url-pattern>*.css</url-pattern>
    </filter-mapping> 



    (插入一段:在探测这些性能问题的时候,我使用的是一个Firebug的插件,也就是Firefox插件的插件-YSlow,好像是Yahoo的,结合Firebug里XHR的Net这块做Profiling,效果很不错,很容易就知道瓶颈)

    还有一个gzip的办法,就是在服务器压缩内容,再传给浏览器。现在主流的浏览器都支持gzip压缩,而且这些html和js文本压缩起来很厉害,基本上可以有40%的压缩率。办法在servel.xml的注释里也有写,就是在Connector元素里加上

compression="on"
            compressionMinSize="2048"
            noCompressionUserAgents="gozilla,traviata"
            compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"


1) compression="on" 打开压缩功能
2) compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB(即输出内容大于2KB才压缩)
3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩&<60;
4) compressableMimeType="text/html,text/xml" 压缩类型



以上的内容大部分都是Google得来,我自己做了一下整理
分享到:
评论
1 楼 hyj1254 2011-08-29  
正在研究这个,收藏一个。

相关推荐

    apache-tomcat-8.5配置优化后

    它的配置优化对于提升应用性能、确保稳定性和安全至关重要。在这个配置优化后版本中,我们已经设置好了管理员的用户名和密码,允许用户直接使用admin账户登录进行管理操作。 **优化要点一:JVM配置** 1. **内存分配...

    tomcat设置gzip压缩共2页.pdf.zip

    在IT行业中,Tomcat是一个广泛使用的开源Web服务器和Java应用服务器,它基于Apache软件基金会的Jakarta项目。Gzip是一种常用的文件压缩格式,用于在网络上传输数据时减少数据量,从而提高传输速度和降低网络带宽消耗...

    Tomcat优化相关问题.zip

    1. **最大线程数**:根据服务器配置和应用负载设定,防止过多线程导致资源浪费。 2. **最小线程数**:确保低负载时仍能快速响应请求。 3. **线程空闲超时**:设置合理的超时时间,避免线程长时间不被使用占用资源。 ...

    J2EE gzip压缩

    在J2EE应用开发中,优化资源加载速度和...总之,J2EE环境中的gzip压缩是一个有效的优化手段,能够提升Web应用的性能和用户体验。正确理解和使用gzip,结合适当的配置和实践,将使我们的J2EE应用更加高效和响应迅速。

    struts2项目性能调优三步曲.txt

    1. **启用缓存控制**:通过设置`Cache-Control`和`Expires`头,可以指示浏览器缓存静态资源,减少重复请求。 ```xml &lt;!-- 在web.xml中 --&gt; &lt;filter-name&gt;MyCachingFilter&lt;/filter-name&gt; &lt;filter-class&gt;...

    J2EE实用技巧汇总

    3. **HTTP缓存控制**:"有关客户端浏览器缓存的Http头介绍"解释了HTTP头部如Cache-Control, Expires, ETag等在控制浏览器缓存中的作用,这对于优化Web应用的响应速度和减少网络带宽消耗至关重要。 4. **Tomcat连接...

    jetty使用文档

    Jetty 是一款轻量级、高性能的开源 Java Web 容器,它不仅作为一个服务器,还提供了许多工具和服务,便于开发者构建...通过了解和掌握Jetty的各项特性和配置,开发者可以充分利用其优势,提高项目开发效率和应用性能。

    TOCAT 优化版

    Apache Tomcat是一款广泛应用的开源Java Servlet容器,它执行Java服务器页面(JSP)和Servlet,是许多Web应用程序的基础。...实际应用中,应根据具体环境和应用需求进行调整和测试,以达到最佳效果。

    狂神说javaweb实战静态资源.rar

    综上,"狂神说javaweb实战静态资源"这部分内容可能涉及了如何在JavaWeb环境中管理、优化和访问静态资源的方方面面,对于深入理解JavaWeb开发和提升项目性能至关重要。学习者应关注静态资源的组织结构、访问方式、...

    实战Nginx.取代Apache的高性能Web服务器.2010

    - **Nginx的浏览器本地缓存设置**:通过设置HTTP响应头中的`Cache-Control`和`Expires`字段,可以控制浏览器如何缓存页面资源。 #### Nginx与PHP(FastCGI)的安装、配置与优化 - **安装PHP**:可以在Linux系统中...

    《Jetty6_指南书》

    - **缓存策略**: 使用`Cache-Control`和`Last-Modified`头优化浏览器缓存。 - **高负载服务器**: 对于高负载服务器的特殊配置建议。 - **Linux下的配置**: 如何在Linux环境下调整最大连接数等配置。 #### 十四、...

    jetty指南书

    16. **性能优化**:包括线程池调整、内存配置、共享库的使用,以及各种性能优化策略,如GZIP压缩、Last-Modified和Cache-Control头的利用。 17. **异步Servlet、Ajax和Comet**:介绍了支持异步处理和长连接的技术,...

    jetty指导书

    在高负载服务器上,除了上述优化措施外,还可以考虑使用负载均衡等技术来进一步提升性能。 **13.8 Linux最大连接数配置** 在Linux环境下,可以通过调整内核参数来增加服务器的最大连接数。 **13.9 Linux下epoll...

    Jetty权威指南.pdf

    启用GZIP压缩可以减小传输的数据量,从而降低带宽使用和提高响应速度。 **13.5 Optimizing with Last-Modified and Cache-Control** 通过设置HTTP头部中的`Last-Modified`和`Cache-Control`字段,可以有效利用...

    be-main-service:Java后端静态资源提供者给用户

    性能优化方面,除了缓存,还可以利用Gzip压缩来减小文件传输大小,提升加载效率。Spring Boot默认支持Gzip压缩,只需在配置中开启即可。 对于API接口,RESTful设计原则是常见的选择。使用HTTP方法(GET、POST、PUT...

    浅谈servlet中的request与response

    9. `Expires`, `Cache-Control`, `Pragma`: 控制缓存策略,防止不必要的重复请求。 10. `Connection`: 指定服务器与浏览器之间的连接状态,如关闭或保持连接。 在Servlet中,处理请求和响应通常涉及`doGet()`和`...

Global site tag (gtag.js) - Google Analytics