这个其实应该是常识,只不过以前做的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得来,我自己做了一下整理
分享到:
相关推荐
它的配置优化对于提升应用性能、确保稳定性和安全至关重要。在这个配置优化后版本中,我们已经设置好了管理员的用户名和密码,允许用户直接使用admin账户登录进行管理操作。 **优化要点一:JVM配置** 1. **内存分配...
在IT行业中,Tomcat是一个广泛使用的开源Web服务器和Java应用服务器,它基于Apache软件基金会的Jakarta项目。Gzip是一种常用的文件压缩格式,用于在网络上传输数据时减少数据量,从而提高传输速度和降低网络带宽消耗...
1. **最大线程数**:根据服务器配置和应用负载设定,防止过多线程导致资源浪费。 2. **最小线程数**:确保低负载时仍能快速响应请求。 3. **线程空闲超时**:设置合理的超时时间,避免线程长时间不被使用占用资源。 ...
在J2EE应用开发中,优化资源加载速度和...总之,J2EE环境中的gzip压缩是一个有效的优化手段,能够提升Web应用的性能和用户体验。正确理解和使用gzip,结合适当的配置和实践,将使我们的J2EE应用更加高效和响应迅速。
1. **启用缓存控制**:通过设置`Cache-Control`和`Expires`头,可以指示浏览器缓存静态资源,减少重复请求。 ```xml <!-- 在web.xml中 --> <filter-name>MyCachingFilter</filter-name> <filter-class>...
3. **HTTP缓存控制**:"有关客户端浏览器缓存的Http头介绍"解释了HTTP头部如Cache-Control, Expires, ETag等在控制浏览器缓存中的作用,这对于优化Web应用的响应速度和减少网络带宽消耗至关重要。 4. **Tomcat连接...
Jetty 是一款轻量级、高性能的开源 Java Web 容器,它不仅作为一个服务器,还提供了许多工具和服务,便于开发者构建...通过了解和掌握Jetty的各项特性和配置,开发者可以充分利用其优势,提高项目开发效率和应用性能。
Apache Tomcat是一款广泛应用的开源Java Servlet容器,它执行Java服务器页面(JSP)和Servlet,是许多Web应用程序的基础。...实际应用中,应根据具体环境和应用需求进行调整和测试,以达到最佳效果。
综上,"狂神说javaweb实战静态资源"这部分内容可能涉及了如何在JavaWeb环境中管理、优化和访问静态资源的方方面面,对于深入理解JavaWeb开发和提升项目性能至关重要。学习者应关注静态资源的组织结构、访问方式、...
- **Nginx的浏览器本地缓存设置**:通过设置HTTP响应头中的`Cache-Control`和`Expires`字段,可以控制浏览器如何缓存页面资源。 #### Nginx与PHP(FastCGI)的安装、配置与优化 - **安装PHP**:可以在Linux系统中...
- **缓存策略**: 使用`Cache-Control`和`Last-Modified`头优化浏览器缓存。 - **高负载服务器**: 对于高负载服务器的特殊配置建议。 - **Linux下的配置**: 如何在Linux环境下调整最大连接数等配置。 #### 十四、...
16. **性能优化**:包括线程池调整、内存配置、共享库的使用,以及各种性能优化策略,如GZIP压缩、Last-Modified和Cache-Control头的利用。 17. **异步Servlet、Ajax和Comet**:介绍了支持异步处理和长连接的技术,...
在高负载服务器上,除了上述优化措施外,还可以考虑使用负载均衡等技术来进一步提升性能。 **13.8 Linux最大连接数配置** 在Linux环境下,可以通过调整内核参数来增加服务器的最大连接数。 **13.9 Linux下epoll...
启用GZIP压缩可以减小传输的数据量,从而降低带宽使用和提高响应速度。 **13.5 Optimizing with Last-Modified and Cache-Control** 通过设置HTTP头部中的`Last-Modified`和`Cache-Control`字段,可以有效利用...
性能优化方面,除了缓存,还可以利用Gzip压缩来减小文件传输大小,提升加载效率。Spring Boot默认支持Gzip压缩,只需在配置中开启即可。 对于API接口,RESTful设计原则是常见的选择。使用HTTP方法(GET、POST、PUT...
9. `Expires`, `Cache-Control`, `Pragma`: 控制缓存策略,防止不必要的重复请求。 10. `Connection`: 指定服务器与浏览器之间的连接状态,如关闭或保持连接。 在Servlet中,处理请求和响应通常涉及`doGet()`和`...