一个客户的表单上字段超过五百,经浏览器的调试器发现主要问题是从服务器取数据花费了大量时间,下载内容大小约1.2M,下载时间在10s左右,导致样式加载完大约在17s左右(不清除浏览器缓存)。最终考虑利用gzip压缩来解决数据量大的问题。
web.xml配置过滤器:
<filter> <filter-name>Compress</filter-name> <filter-class>weaver.filter.GZIPFilter</filter-class> </filter> <filter-mapping> <filter-name>Compress</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Compress</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Compress</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
过滤器代码:
package weaver.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GZIPFilter implements Filter { public void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException { if ((paramServletRequest instanceof HttpServletRequest)) { HttpServletRequest localHttpServletRequest = (HttpServletRequest)paramServletRequest; HttpServletResponse localHttpServletResponse = (HttpServletResponse)paramServletResponse; String str = localHttpServletRequest.getHeader("accept-encoding"); if ((str != null) && (str.indexOf("gzip") != -1)) { GZIPResponseWrapper localGZIPResponseWrapper = new GZIPResponseWrapper(localHttpServletResponse); paramFilterChain.doFilter(paramServletRequest, localGZIPResponseWrapper); localGZIPResponseWrapper.finishResponse(); return; } paramFilterChain.doFilter(paramServletRequest, paramServletResponse); } } public void init(FilterConfig paramFilterConfig) { } public void destroy() { } }
经测试,表单速度加载提升一倍,客户表示认可。