主题:tomcat的gzip压缩配置及优化效果对比

配置原因:

1.最近使用百度工具进行网站速度诊断时发现网站速度评分不是很理想,而网站速度对粉丝们的体验影响是非常直接的,故有了此文的优化配置。

当然这个只是一个优化点:其他优化点,以后陆续会添加上来,尽情关注,有其他需求的也可以留言。

实际操作

步奏一(配置):找到tomcat的server.xml文件,找到其中Connector节点然后进行配置修改,具体配置如下

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"  maxPostSize="0" 
			   useBodyEncodingForURI="true" compression="on" 
			   compressionMinSize="2048" 
			   noCompressionUserAgents="gozilla, traviata" 
			   compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,image/jpeg,application/json"/>
参数说明:
compression="on"  打开压缩功能  
compressionMinSize="2048"  启用压缩的输出内容大小,当被压缩对象的大小>=该值时才会被压缩,这里面默认为2KB  
noCompressionUserAgents="gozilla, traviata"  对于以下的浏览器,不启用压缩  
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  压缩类型  
注意: tomcat7以后,js文件的mimetype类型变为了application/javascript,而在tomcat7以下则为text/javascript;具体的tomcat7定义的类型可以在:conf/web.xml文件中找到。
可以在web.xml下搜索,如我搜索javascript会找到如下代码
    <mime-mapping>
        <extension>js</extension>
        <mime-type>application/javascript</mime-type>
    </mime-mapping>
切记上面的类型不能配置错了,如果配置错了压缩是不会起作用的。

步奏二(测试):

使用apache HttpClient访问该tomcat加载项目中的一个静态资源(比如一个js文件),然后打印请求的资源内容 或 资源ContentLength,

如果打印的资源内容为乱码 或 ContentLength为 -1,则说明gzip生效了

public static void main(String[] args)
{
  String uri = "http://localhost:8080/gziptest/jquery.js";
  HttpClient httpClient = new DefaultHttpClient();
  HttpGet get = new HttpGet(uri);
  ResponseHandler<String> responseHandler = new BasicResponseHandler();
  
  try {
    // 设置模拟头部
    get.setHeader("Accept-Encoding", "gzip,deflate");
    get.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36");
    
    String content = httpClient.execute(get, responseHandler);
    System.out.println(content); // 如果gzip生效,这里会打印出乱码;否则会打印出jquery.js的内容
    
    /*
    HttpResponse response = httpClient.execute(get);
    long cLen = response.getEntity().getContentLength();
    System.out.println(cLen); // 如果gzip生效,这里打印的长度值将会是 -1 或一个比原始文件大小小很多的值
    */	
    
  } catch(Exception e) {
    // ignore ...
  } finally {
    httpClient.getConnectionManager().shutdown();	
  }
  
}
下面配上本站优化前后百度诊断的的效果对比

下图是配置前的效果图


下图是配置后的效果图


通过上面的截图可以明显的看出,很多之前没压缩的文件都经过压缩了。但是bootstrap.min.css等个别css文件不知道为什么有没有起作用,

如果有知情的烦请在评论中告知下,如果我后续找到原因了我也将更新此博文。



注明:针对以上存在的bootstrap.min.css等文件未压缩的问题目前以前找到原因了具体请查看笔记 Tomcat配置Gzip无效

原因是tomcat启动了nio屏蔽了gzip功能,可以通过添加参数useSendfile="false"来强行启动gzip。

以下附上效果图。



作者:星辰 时间:2016-05-14 浏览 1832评论 0 赞 1砸 0 标签: 优化 tomcat
评论
还可以再输入500个字

请您注意

·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款