web压缩是减少服务器响应流量、节省带宽,加快响应速度的一种方法,可提高页面性能。
deflate是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法,有众多开源的实现算法。
deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据
2、Apache 开启 gzip 压缩首先确保加载了 mod_deflate 模块,然后在 httpd.conf 代码中增加:
经过测试,采用服务器压缩要比使用 PHP 压缩要更快,而且压缩之后更小。
压缩格式:
从浏览器常见的请求头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 压缩要更快,而且压缩之后更小。