GZIP压缩是一个经常被用到的WEB性能优化的技巧,它主要是对页面代码,CSS,Javascript,PHP等文件进行压缩,而且在压缩的前后,文件的大小会有明显的改变,从而达到网站访问加速的目的。
接下来我们就介绍一下什么是GZIP压缩,以及GZIP压缩是个什么概念。
GZIP网页压缩,是一种WEB服务器与浏览器之间共同遵守的协议,也就是说WEB服务器和浏览器都必须支持该技术才能实现GZIP压缩,而当下主流的浏览器都是支持GZIP压缩,包括IE6、IE7、IE8、IE9、FireFox、谷歌浏览器、Opera等,而常见的WEB服务器通常有Apache和IIS两种。
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。目前,GZIP已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
下面介绍一下GZIP压缩时,WEB服务器与浏览器之间的协商过程如下:
1、首先浏览器请求某个URL地址,并在请求的开始部分头(head) 设置属性accept-encoding值为gzip、deflate,表明浏览器支持gzip和deflate这两种压缩方式(事实上deflate也是使用GZIP压缩协议,在之后的内容之我们会介绍二者之间的区别);
2、WEB服务器接收到请求后判断浏览器是否支持GZIP压缩,如果支持就传送压缩后的响应内容,否则传送不经过压缩的内容;
3、浏览器获取响应内容后,判断内容是否被压缩,如果是压缩文件则解压缩,然后显示响应页面的内容。
HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指 WWW服务器中安装的一个功能,当有人来访问这个服务器的网站时,服务器的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文 内容可压缩到原大小的40%,这样以来文件的体积就减小了很多,传输速度也就快了。效果就是你点击网址后会很快的显示出来。当然这也会增加服务器的负载,一般的服务器中都会安装有这个功能模块。
GZIP压缩的比率往往在3倍到10倍,也就是本来90k大小的页面,采用压缩后实际传输的内容大小只有28至30K大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。
在实际应用中,我们并不需要对网站所有文件都进行压缩,只需要对静态文件进行压缩就可以了,比如Javascript、CSS及和HTML文件。对其他文件进行压缩并不会给WEB性能带来太多的改观,并且对网站开启GZIP功能是需要牺牲部分服务器性能的。而且对于FLASH文件来说开启GZIP压缩之后还会影响其效果。
在SAE上开启gzip 设置方法:
通常对网站内容进行Gzip压缩,会提高网站打开速度。浏览器会自动解压缩的,所以这种压缩 对网站内容本身没有多大影响。
SAE设置方法有两种:在管理面板中config设置;在代码中设置好上传。两种方法几乎是一样的。这里主要讲第一种:进入项目管理页面,在AppConfig中,点击页面压缩,然后在弹出的对话框中,点击高级语法,然后复制下面代码进去保存就 可以了。( 第二种方式是在config.yaml文件中输 入以下内容,然后用SVN上传就可以了)。
- compress: if ( out_header["Content-type"] ~ "text/css" ) compress
- compress: if ( out_header["Content-type"] ~ "text/javascript" ) compress
- compress: if ( out_header["Content-type"] ~ "application/octet-stream" ) compress
- compress: if ( out_header["Content-type"] ~ "text/html" ) compress
- compress: if ( out_header["Content-type"] ~ "application/zip" ) compress
- compress: if ( out_header["Content-type"] ~ "application/x-zip-compressed" ) compress
- compress: if ( out_header["Content-type"] ~ "application/pdf" ) compress
- compress: if ( out_header["Content-type"] ~ "application/msword" ) compress
- compress: if ( out_header["Content-type"] ~ "application/vnd.ms-excel" ) compress
- compress: if ( out_header["Content-type"] ~ "application/vnd.ms-powerpoint" ) compress
- compress: if ( out_header["Content-type"] ~ "image/jpeg" ) compress
- compress: if ( out_header["Content-type"] ~ "image/png" ) compress
- compress: if ( out_header["Content-type"] ~ "image/pjpeg" ) compress
- compress: if ( out_header["Content-type"] ~ "image/gif" ) compress
- compress: if ( out_header["Content-type"] ~ "application/x-shockwave-flash" ) compress
- compress: if ( out_header["Content-type"] ~ "image/bmp" ) compress
查询设置是否成功,在站长工具的网页GZIP压缩检测 http://tool.chinaz.com/Gzips/中查询。
php设置gzip压缩:
分享两种压缩页面输出数据以提高网页访问速度的方法,一种是通过使用php zlib扩展实现页面gzip压缩输出(使用php的内置函数ob_gzhandler进行gzip压缩输出),另外一种方法是是通过修改php.ini配置文件开启php gzip以实现压缩页面信息压缩传输,现在分别详细分享一下这两种方法分别是如何实现的!
(1)通过php的内置函数ob_gzhandler进行gzip压缩输出
在页面头部添加如下代码:
if(extension_loaded('zlib') && strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')){
ob_start('ob_gzhandler');
}else{
exit('php zlib使用失败,请确认是否已加载zlib扩展');
}
在页面尾部添加如下代码:
if(extension_loaded('zlib')){ob_end_flush();}
(2)通过修改php.ini配置文件实现开启或关闭php gzip以实现压缩页面信息压缩传输
一、找到并打开php.ini配置文件,找到zlib.output_compression = Off,将
zlib.output_compression = Off
;zlib.output_compression_level = -1
修改为:
zlib.output_compression = On
zlib.output_compression_level = 6
php gzip配置知识点:
1、默认php是不开启zlib整站压缩输出的,而是通过对需要压缩输出的页面使用ob_gzhandler函数实现,两者只能二选一,否则会报错。
2、zlib.output_compression默认值为Off,你可以将其设置为On,或者output buffer size(默认为4k)
3、zlib.output_compression_level代表压缩比,默认推荐设置压缩比值为6,可选范围为1-9,-1代表关闭php zlib(gzip)压缩
二、保存php.ini配置文件,并重启apache服务器
三、打开apache 配置文件httpd.conf,配置装载deflate_module。这一步是最关键的开启php gzip压缩输出配置步骤,方法如下,找到
#LoadModule deflate_module modules/mod_deflate.so
这一段并去除开头的#号,然后重启apache即可。
注意:这种办法是相对于php版本大于4.3来说的,php4.3版本以前的需要另外单独安装zlib的。
参考网站:
http://jacky.aiwaly.com/wp/web-gzip-jiashao.html
http://www.oobai.com/2014/php_news_0522/616.html