现在的位置: 首页 > 综合 > 正文

你的php网站开启gzip压缩了吗?

2014年07月23日 ⁄ 综合 ⁄ 共 2959字 ⁄ 字号 评论关闭

Gzip网页压缩可以大幅度提升网站访问速度,对于网站在国外的站来说,这是必不可少的一步,提升网页打开速度非常明显,现在我们就系统的来认识一下这个Gzip的庐山真面目。

  一、何为GZIP

  GZIP概念

  GZIP最早由Jean-loup Gailly和MarkAdler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

  HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载.一般服务器中都安装有这个功能模块的.

  二、开启GZIP有什么好处?

  Gzip开启以后会将输出到用户浏览器的数据进行压缩的处理,这样就会减小通过网络传输的数据量,提高浏览的速度。gzip可以极大的加速网站.有时压缩比率高到80%,最少都有40%以上。

    三、apache服务器如何开启gzip压缩?

   首先说一下windows环境下如何开通apache2.2服务器的gzip压缩吧

在apache2.2的安装目录下有文件夹modules/mod_deflate.so

然后修改一下conf/httpd.conf,这个是apache2.2的配置文件

将LoadModule deflate_module modules/mod_deflate.so这一句之前的#号去掉

将LoadModule headers_module modules/mod_headers.so这一句之前的#号也去掉

然后加入以下代码:  
   <IfModuledeflate_module>
     DeflateCompressionLevel 3
     # Compress everything except images

      <Location />
       # Insertfilter
      SetOutputFilter DEFLATE
      
       # Netscape4.x has some problems...
       BrowserMatch^Mozilla/4 gzip-only-text/html
      
       # Netscape4.06-4.08 have some more problems
       BrowserMatch^Mozilla/4\.0[678] no-gzip
      
       # MSIEmasquerades as Netscape, but it is fine
       BrowserMatch\bMSIE !no-gzip !gzip-only-text/html
       # Don'tcompress images
      SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzipdont-vary
      
       #Make sureproxies don't deliver the wrong content
       Headerappend Vary User-Agent env=!dont-vary

     </Location>

</IfModule> 

这样就可以压缩web服务器上除图片之外的资源了。

通过firefox浏览器的firebug我们可以对比一下phpinfo()方法在压缩前和压缩之后的请求响应情况。


网页的大小压缩了将近1/6,真的很可观啊,看来网站开启gzip压缩还是大势所趋的,可以大大地降低访问时的带宽的,同时还可以提高用户访问网站的速度,仔细对比上图你就会发现,未压缩前访问该页面的时间至少283ms,压缩后访问才34ms,访问时间缩短为原来的1/8还要少,这样也可以让我们的web服务器可以承载更多的人访问,不错的注意。

客户实际部署的网站这样设置了之后发现有时候apache设置的网页压缩会失效,可能是防火墙对gzip文件解压导致的吧。这时候我们可以强制压缩,但强制压缩了之后发现swfupload这个控件不能用了,上传不了文件了,检查一下原因发现,是由于后台的url返回的信息有误,实际上是由于我们设置了SetEnv force_gzip "yes" 这一行导致的,后来对于处理文件上传的后台文件就放开了不再压缩,具体设置为:

<IfModule deflate_module>
   DeflateCompressionLevel 3
    # Compresseverything except images
   <Location />
       SetEnvforce_gzip "yes"
      SetOutputFilter DEFLATE
       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 \\.(?:gif|jpe?g|png)$ no-gzipdont-vary
      SetEnvIfNoCase Request_URI swfupload\.php$ no-gzip dont-vary
      SetEnvIfNoCase Request_URI uploadfile\.php$ no-gzip dont-vary
       Headerappend Vary User-Agent env=!dont-vary
   </Location>
</IfModule>

其中swfupload\.php和uploadfile\.php这两个文件就是处理后台上传功能的文件,这样通过swfupload的flash控件上传时就不会出错了。

DeflateCompressionLevel 3这一句中的3实际上是可以修改的,改到1-9均可,不过我稍微改成了6却发现没有特别的提升。先就这样设置吧。

感谢摸索着学习apache开通压缩功能的同事给我指导。

整理linux下的gzip配置情况吧,其实这个功能在ubuntu 12.04 server版本中是内置的。

具体情况以后再写吧。

我安装lamp时用的命令是:apt-get install apache2

咱们现在测试一下看apache是否支持gzip网页压缩呢?

先写一个简单的info.php

<?php

phpinfo();

?>

然后放到/var/www/目录下

然后在firefox中输入 http://192.168.32.133/info.php

用firebug看到该网页的请求响应情况,如下图:

可以看到apache已经启用对于网页的gzip压缩了。

看一下他的配置吧

抱歉!评论已关闭.