zoukankan      html  css  js  c++  java
  • 配gzip的过滤器进行压缩解决表单加载慢问题

    一个客户的表单上字段超过五百,经浏览器的调试器发现主要问题是从服务器取数据花费了大量时间,下载内容大小约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()
      {
      }
    }

    经测试,表单速度加载提升一倍,客户表示认可。

  • 相关阅读:
    cshtml 中的 AppState = Context.Application 和 控制器中的 Application 也相等
    HangFire快速入门 分布式后端作业调度框架服务
    用RSA加密实现Web登录密码加密传输
    c# MD5及盐值加密
    CentOS目录结构超详细版
    两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)
    利用js实现 禁用浏览器后退
    在.Net Core WebAPI下给Swagger增加导出离线文档功能
    mysql 数据库扫描行数
    EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)
  • 原文地址:https://www.cnblogs.com/liuyk-code/p/6672463.html
Copyright © 2011-2022 走看看