|
今晚才发现ckeditor又有新版本放出了,于是上官网下了下来,顺便点进它的官方demo页面逛了圈,demo加载还是一样的很快,比我博客上用的快多了,很好奇官方demo是不是也用那个260多k的ckeditor.js,于是打开firefox的firebug插件,通过其网络功能观察了下,显示ckeditor.js只有83K,但通过访问其链接把js下到本地,却还是267K,原来是在服务器压缩了!我知道服务器能把文本内容压缩后再推送到客户端,但还是没想到能压缩到这个程度。心动了,于是上网google了下,把我的服务器(用的是tomcat6.20)也开启了gzip压缩功能,其间也收集到一些资料,在这里跟大家共享之。
一、关于gzip
gzip是一个网页领域的压缩标准,GNU Zip格式。它通过向客户端浏览器发送gzip格式的压缩格式(通常能达到50%的压缩率以上),然后客户端浏览器对接收到的压缩格式进行解压缩,以达到减少网页访问打开时间,优化网站性能的目的。。l- 本文来自http://spyrise.org/blog/ -Qzf。
gzip压缩是很多服务器软件,如Apache,nginx,IIS等的标准配置。gzip更是绝大多数客户端浏览器支持的基本功能。b带CY- 本文来自http://spyrise.org/blog/ -带l#xnxSz。
开启gzip功能,会占用一定服务器的CPU。同时gzip的对象是一些文本格式的文件,如html、htm、css、js等。大家用过WinZip或 WinRAR的话,对一个Word文档压缩不了多少,但对一些文本文件的压缩率应该很大的,一般能达到30%左右,zip优化网站就是这个原理。
二. HTTP压缩工作原理
Web服务器处理HTTP压缩的工作原理如下:
1. Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
2. 如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
3. 如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
4. 如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
5. 如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6. 如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。
下面以2个图片来加深理解:
1. 没使用gzip:
2. 使用gzip后:
三、tomcat服务器开启gzip功能的方法
tomcat5.0以后的版本是支持对输出内容进行gzip格式的压缩的。该功能默认是关闭的,如果需要启用该功能,我们需要修改tomcat的配置文件server.xml,修改的方法是在server.xml的节点
1 <connector connectiontimeout= "20000" port= "8080" protocol= "HTTP/1.1" redirectport= "8443" uriencoding= "UTF-8" ><connector connectiontimeout= "20000" port= "8080" protocol= "HTTP/1.1" redirectport= "8443" uriencoding= "UTF-8" ></connector></connector>
处加上属性: compression="on" ,即
下面是跟gzip功能有关属性的说明:
compression="on" 打开压缩功能
compressionMinSize="2048" // 启用压缩的输出内容大小,这里面默认为2KB
noCompressionUserAgents="gozilla, traviata" // 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml" //压缩文本类型,多个用,隔开
四、测试gzip压缩功能是否正确开启:
测试的方法很简单,只要用firefox的firebug插件里的网络监控功能,看看下载js文件的体积是否有明显减少就知道了(测试前最好清下浏览器的缓存)。
另外还可以用httpclient来写一个测试程序(以下内容摘自java自由人 ):
一旦启用了这个压缩功能后,我们怎么来测试压缩是否有效呢?首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,所以我们可以用httpclient来写一个这样的简单测试程序
01 /**
02 * HTTP客户端测试类
03 * @author liudong
04 */
05 public class HttpTester {
06
07 /**
08 * @param args
09 */
10 public static void main(String[] args) throws Exception{
11 HttpClient http = new HttpClient();
12 GetMethod get = new GetMethod( "http://www.dlog.cn/js/prototype.js " );
13 try {
14 get.addRequestHeader( "accept-encoding" , "gzip,deflate" );
15 get.addRequestHeader( "user-agent" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar; Maxthon 2.0)" );
16 int er = http.executeMethod(get);
17 if (er== 200 ){
18 System.out.println(get.getResponseContentLength());
19 String html = get.getResponseBodyAsString();
20 System.out.println(html);
21 System.out.println(html.getBytes().length);
22 }
23 } finally {
24 get.releaseConnection();
25 }
26 }
27 }
执行这个测试程序,看看它所输出的是什么内容,如果输出的是一些乱码,以及打印内容的长度远小于实际的长度,那么恭喜你,你的配置生效了,你会发现你网站的浏览速度比以前快多了。
五、介绍一个在线gzip压缩网页的网站
http://www.gidnetwork.com/tools/gzip-test.php ,大家在服务器使用gzip功能前,可以先使用这个网站把自己的页面进行gzip压缩,看能压缩多少,好有个感性的认识,用法很简单,输入要测试的页面,再点“check”按钮就OK了 |
|