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

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 压缩要更快,而且压缩之后更小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值