实现WEB压缩的三种途径:Web服务器(Nginx/Apache)、Php扩展、Php代码

来源:互联网 发布:mac 添加歌曲至资源 编辑:程序博客网 时间:2024/05/22 00:47
web压缩是减少服务器响应流量、节省带宽,加快响应速度的一种方法,可提高页面性能。

压缩格式:

从浏览器常见的请求头Accept-Encoding:"gzip, deflate"可知,常见压缩格式有gzip,deflate。

网摘:gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分. GZIP是使用DEFLATE进行压缩数据的另一个压缩库
deflate是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法,有众多开源的实现算法。

deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据

下面介绍实现WEB压缩的三种途径,同一时间只能允许一种方式存在

一、WEB服务器开启压缩

1、Nginx开启 gzip 压缩

#返回Vary:Accept-Encoding头。#开启压缩时,需要针对压缩和非压缩文件,都返回Vary:Accept-Encoding头。#这个头部是告诉缓存服务器,要根据用户支持的编码方式提供对应的文件。gzip_vary on;#开启压缩gzip on;#IE6对gzip支持不是太好,所以客户端如果是IE6那么服务器禁用gzip压缩gzip_disable "msie6";#any - 无条件启用压缩gzip_proxied any;#设置buffer大小gzip_buffers 4 16k;#最小阀值,小于该值的文件将不进行压缩。可降低CPU的负荷gzip_min_length 1k;#压缩等级1-10,数字越大压缩比越高,但耗时和CPU占用也越高。一般超过6后,耗时增加很多但压缩比没有明显增长。gzip_comp_level 6;#支持的压缩格式,没有写图片,因为jpeg,png已经有较高的压缩比,没必要再耗费cpu资源gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

2、Apache 开启 gzip 压缩首先确保加载了 mod_deflate 模块,然后在 httpd.conf 代码中增加:
<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/json application/x-httpd-php application/x-javascript</IfModule>

二、PHP开启压缩(前提:需要php安装zlib扩展。一般php4.3以后就内置在php中了)

1、在php.ini文件中找到zlib.output_compression,改成zlib.output_compression = On。

2、zlib.output_compression_level前面的;去掉,后面的-1改成1~5的数值。建议参数值是1~5,6以实际压缩效果提升不大,cpu占用却是几何增长

三、代码方式(前提:需要php安装zlib扩展。一般php4.3以后就内置在php中了)

如果无法修改 php.ini 文件,则可以在需要 gzip 压缩的 PHP 文件头部加入:

if(extension_loaded('zlib')){    if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {        ob_start('ob_gzhandler');    }else{        ob_start();    }}
或者自定义压缩函数:
function ob_gzip($content)  {       if( !headers_sent() &&  extension_loaded("zlib") &&      strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")) {          $content = gzencode($content." \n",9);        header("Content-Encoding: gzip");//很重要。否则客户端不认识压缩后的字符          header("Vary: Accept-Encoding");           header("Content-Length: ".strlen($content)); //很重要。否则长度不对,客户端会一直等着。     }      return $content;  }  //调用ob_start('ob_gzip');  echo $content_to_compress;  ob_end_flush();  

经过测试,采用服务器压缩要比使用 PHP 压缩要更快,而且压缩之后更小。
1 0