zoukankan      html  css  js  c++  java
  • 浏览器页面请求js、css大文件处理

    当页面引用一个比较大的js和css文件时,会出现较大下载延迟,占用带宽的问题,如果一个应用里有很多这样的js或CSS文件,那么就需要优化了。

    比如ext-all.js有1.4M,页面引用这个文件,正常引用如下:

    <script type="text/javascript" charset="utf-8" src="/extjs/ext-all.js"></script>

    HTTP中响应头(Response Headers)属性content-Encoding,可以指定内容编码方式。内容编码方式则指出字节如何编码为其他字节。
    比如我们这里设定content-Encoding:gzip,这样浏览器请求一个gzip格式的文件到浏览器端,然后浏览器端再按照gzip格式解压使用。

    这样就给刚才的问题提供了一种思路,我们可以把服务器端较大的js或CSS使用gizp压缩一下,文件就变小了,然后发送这个较小的文件到浏览器端,让浏览器解压后共页面引用。

    第一步:把js文件压缩一下

    ext-all.gzjs

    第二步:html添加引用

    <script type="text/javascript" charset="utf-8" src="/extjs/ext-all.gzjs"></script>

    第三步:web.xml设置header属性过滤器

    <filter>
          <filter-name>GzipFilter</filter-name>
          <filter-class>com.util.GzipFilter</filter-class>
          <init-param>
              <param-name>headers</param-name>
              <param-value>Content-Encoding=gzip</param-value>
          </init-param>
      </filter>
      <filter-mapping>
          <filter-name>GzipFilter</filter-name>
          <url-pattern>*.gzjs</url-pattern>
      </filter-mapping>
      <filter-mapping>
          <filter-name>GzipFilter</filter-name>
          <url-pattern>*.gzcss</url-pattern>
      </filter-mapping>

    第四步:实现过滤器GzipFilter

    package com.util;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    
    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.HttpServletResponse;
    public class GzipFilter implements Filter {
    
        /** 参数键值:头信息 */
        public static final String PARAM_KEY_HEADERS = "headers";
    
        /** 头信息 */
        private Map<String, String> headers;
    
        /**
         * <B>方法名称:</B>初始化<BR>
         * <B>概要说明:</B>初始化过滤器<BR>
         * 
         * @param fConfig 过滤器配置
         * @throws ServletException Servlet异常
         * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
         */
        public void init(FilterConfig fConfig) throws ServletException {
            String param = fConfig.getInitParameter(PARAM_KEY_HEADERS);
            if (param == null || param.trim().length() < 1) {
                return;
            }
            this.headers = new HashMap<String, String>();
            String[] params = param.split(",");
            String[] kvs = null;
            for (int i = 0; i < params.length; i++) {
                param = params[i];
                if (param != null && param.trim().length() > 0) {
                    kvs = param.split("=");
                    if (kvs != null && kvs.length == 2) {
                        headers.put(kvs[0], kvs[1]);
                    }
                }
            }
            if (this.headers.isEmpty()) {
                this.headers = null;
            }
        }
    
        /**
         * <B>方法名称:</B>过滤处理<BR>
         * <B>概要说明:</B>设定编码格式<BR>
         * 
         * @param request 请求
         * @param response 响应
         * @param chain 过滤器链
         * @throws IOException IO异常
         * @throws ServletException Servlet异常
         * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
         *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
                ServletException {
            if (this.headers != null) {
                HttpServletResponse res = (HttpServletResponse) response;
                for (Entry<String, String> header : this.headers.entrySet()) {
                    res.addHeader(header.getKey(), header.getValue());
                }
            }
            chain.doFilter(request, response);
        }
    
    
        public void destroy() {
            this.headers.clear();
            this.headers = null;
        }
    
    }
  • 相关阅读:
    oracle常用的sql语句
    Tomcat内存调优
    基于Linux服务器的Oracle自动备份以及定时清除
    Windows 中Oracle数据库定时备份与清除
    CentOS 7 root密码修改
    weblogic忘记用户密码
    weblogic修改密码
    通过python自动获取小说并下载
    Linux修改本机名称
    CentOS无法正常启动
  • 原文地址:https://www.cnblogs.com/cac2020/p/9877417.html
Copyright © 2011-2022 走看看