论坛首页 Web前端技术论坛

Easyui 页面访问慢解决方案,GZIP网站压缩加速优化

浏览 5346 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-06-11   最后修改:2014-06-11

1. 静态资源压缩
GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量。

通过资源压缩拦截器,减少带宽访问

参考代码:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /**  
  2.  * JS缓存压缩  
  3.  * JEECG开源社区  
  4.  * 论坛:www.jeecg.org  
  5.  * @author  张代浩  
  6.  */  
  7. public class GZipFilter implements Filter {  
  8.   
  9.       
  10.     public void destroy() {  
  11.     }  
  12.       /**  
  13.        * 判断浏览器是否支持GZIP  
  14.        * @param request  
  15.        * @return  
  16.        */  
  17.       private static boolean isGZipEncoding(HttpServletRequest request){  
  18.         boolean flag=false;  
  19.         String encoding=request.getHeader("Accept-Encoding");  
  20.           //update-begin--Author:JueYue  Date:20140518 for:IE下Excel上传encode为空的bug--------------------  
  21.         if(encoding!=null&&encoding.indexOf("gzip")!=-1){  
  22.           flag=true;  
  23.         }  
  24.           //update-end--Author:JueYue  Date:20140518 for:IE下Excel上传encode为空的bug--------------------  
  25.          return flag;  
  26.       }  
  27.         
  28.     public void doFilter(ServletRequest request, ServletResponse response,  
  29.             FilterChain chain) throws IOException, ServletException {  
  30.         HttpServletResponse resp = (HttpServletResponse) response;  
  31.         HttpServletRequest req=(HttpServletRequest)request;  
  32.         if(isGZipEncoding(req)){  
  33.             Wrapper wrapper = new Wrapper(resp);  
  34.             chain.doFilter(request, wrapper);  
  35.             byte[] gzipData = gzip(wrapper.getResponseData());  
  36.             resp.addHeader("Content-Encoding", "gzip");  
  37.             resp.setContentLength(gzipData.length);  
  38.             //静态资源文件缓存机制  
  39.             //CacheResource(request, response, chain);  
  40.             ServletOutputStream output = response.getOutputStream();  
  41.             output.write(gzipData);  
  42.             output.flush();  
  43.         } else {  
  44.             chain.doFilter(request, response);  
  45.         }          
  46.   
  47.     }  
  48.   
  49.     public void init(FilterConfig filterConfig) throws ServletException {}  
  50.       
  51.     /**  
  52.      * 提高系统访问性能,主键缓存  
  53.      */  
  54.     public void CacheResource(ServletRequest request, ServletResponse response,  
  55.             FilterChain chain){  
  56.         //1.强转httpservlet,方便调用方法     
  57.         HttpServletRequest req = (HttpServletRequest) request;    
  58.         HttpServletResponse res = (HttpServletResponse) response;    
  59.         //2.获取资源文件名的URI     
  60.         String uri = req.getRequestURI();    
  61.         //3.获得文件扩展名,lastIndexOf(".")+1 获得.最后一次出现的索引的后一位:jpg     
  62.         uri = uri.substring(uri.lastIndexOf(".")+1);    
  63.         System.out.println( uri );//测试获取后缀是否正确     
  64.         //4断相应后缀文件,设定缓存时间     
  65.         long date = 0;    
  66.         //System.out.println( new Date().getTime());//测试当前时间用     
  67.             
  68.         //判断URI获取的后缀名是否与JPG相等,不考虑大小写     
  69.         if(uri.equalsIgnoreCase("jpg")){    
  70.             //读取XML里的JPG配置的参数,这里设定了时间     
  71.             //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒     
  72.             date = System.currentTimeMillis()+5*60*60*1000;    
  73.         }    
  74.             
  75.         if(uri.equalsIgnoreCase("gif")){    
  76.             //读取XML里的JPG配置的参数,这里设定了时间     
  77.             //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒     
  78.             date = System.currentTimeMillis()+5*60*60*1000;    
  79.         }    
  80.             
  81.         if(uri.equalsIgnoreCase("css")){    
  82.             //读取XML里的JPG配置的参数,这里设定了时间     
  83.             //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒     
  84.             date = System.currentTimeMillis()+5*60*60*1000;    
  85.         }    
  86.             
  87.         if(uri.equalsIgnoreCase("js")){    
  88.             //读取XML里的JPG配置的参数,这里设定了时间     
  89.             //获取当前系统时间 + 需要缓存的时间(小时),Long 防止溢出,因为单位是毫秒     
  90.             date = System.currentTimeMillis()+5*60*60*1000;    
  91.         }    
  92.         //设置缓存时间     
  93.         res.setDateHeader("Expires", date);    
  94.     }  
  95.   
  96.     private byte[] gzip(byte[] data) {  
  97.         ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);  
  98.         GZIPOutputStream output = null;  
  99.         try {  
  100.             output = new GZIPOutputStream(byteOutput);  
  101.             output.write(data);  
  102.         } catch (IOException e) {  
  103.         } finally {  
  104.             try {  
  105.                 output.close();  
  106.             } catch (IOException e) {  
  107.             }  
  108.         }  
  109.         return byteOutput.toByteArray();  
  110.     }  
  111.   
  112. }  

2. 静态资源缓存
3. easyui 页面优化
   http://www.easyui.info/archives/1435.html
   http://www.360doc.com/content/14/0209/08/9200790_350899585.shtml

   发表时间:2014-06-13  
启用gzip不是在tomcat里设置就可以了吗,还要写代码吗?
0 请登录后投票
   发表时间:2014-06-16  
sanyecao2314 写道
启用gzip不是在tomcat里设置就可以了吗,还要写代码吗?


这种比较通用.你部署到任何中间件都是生效的
0 请登录后投票
   发表时间:2014-06-16  
tomcat里面就配置了。。真正想快速 还是得通过代码优化,不过 这些也是必须的技巧
0 请登录后投票
   发表时间:2014-06-18  
现在个主流web服务器都支持GZIP了,没必要写代码,而且你的应用不可能总在不同的而且非主流的web服务器上各种迁移
0 请登录后投票
   发表时间:2014-06-18  
就 这么几个回复也能上首页?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics