开启gzip的优点是可以减轻服务器的带宽压力同时也会增加服务器cpu压力了,因为开启gzip之后100kb的数据压缩之后会大概只有30kb左右了,
下面我们一起来看gzip优缺点吧。
我想现在网站一般都开启了gzip压缩的吧,特别是大型网站,开启了gzip将对传输效率大大的提高,
一般压缩率可达75%,也就是100kb,压缩后只有25k的样子。
既然gzip压缩这么好,当然毫无疑问开启?是的,一般我们都会开启它,特别是对于流量大的网站来说,开启后的效果太明显了。
在apache里面,只需要开启mod_headers.so和mod_deflate.so再稍加配置就可以了。我们也可以自定义压缩比,
取值范围在1(最低)到9(最高)之间,不过不建议设置的太高,太高后会增加cpu开销。
所以开启gzip的好处就是大大的节省传输的大小,提高网页响应速度和节约带宽,如下图,压缩后的效果非常明显。
利的背后,肯定也少不了弊端。那就是开启gzip后会额外的增加很多cpu的开销,会对服务器产生一起压力,
同时,客户端解压也需要开销(不过客户端还好),这也是不建议把压缩率设置太高的原因。
不过现在硬件一般都比较好了,牺牲一些硬件来提升性能和用户体验还是很划算的!不是说大家好才是真的好吗,只有网页打开速度快了,才是真的好了。
在apache2.0以上(包括apache2.0)的版中gzip压缩使用的是mod_deflate模块,下面是具体配置步骤
第1步
123 LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
打开httpd.conf后,先将上面两行配置前面的#号去掉,这样apache就会启用这两个模块,
其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod_headers模块的作用是告诉浏览器页面使用了gzip压缩,
如果不开启mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而无法正常显示。
第2步
在httpd.conf中加入以下代码,可以加到任何空白地方,不了解apache的朋友,
如果担心加错地方,就放到http.conf文件的最后一行,如果是虚拟服务器可以写.htaccess文件里面,然后放在项目下即可。
1、mod_gzip方式
123456789101112 <IfModule mod_deflate.c>
SetOutputFilter DEFLATE #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/<A href="/js_a/js.html" target=_blank>javascript</A> application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE(www.111cn.net)浏览器会伪装成 Netscape ,但是事实上它没有问题
</IfModule>
2、deflate_Module方式
(1)严格匹配文件类型
1234567891011121314151617181920212223242526272829303
13233343536373839404142434445464748495051 # mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #压缩率, 6是建议值.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/php
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/gif image/png image/jpe image/swf image/jpeg image/bmp
# Don't compress images and other #排除不需要压缩的文件
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-varySetEnvIfNoCase
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</ifmodule>
(2)过滤文件类型
12345678910111213141516171819 # mod_deflate:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6
SetOutputFilter DEFLATE #压缩所有文件
#Don't compress images and other #过滤不需要压缩文件
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>
本配置到这里apache中的gzip压缩就配置完成,重启apache后,新的配置就会生效。最后再用工具检查一下,果然分数提高了很多~呵呵。 不过开启gzip功能需要额外CPU资源开销