我们先来看看gzip到底是个什么东西:
gzip(GNU- ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会快得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的大多数浏览器都支持解析gzip压缩过的资源文件。在实际的应用中我们发现压缩的比率往往在3到10倍,也就是本来50k大小的页面,采用压缩后实际传输的内容大小只有5至15k大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。
实现gzip压缩的方式有多种,比如:nginx、tomcat、java等,选用其中一种即可。
综上所述,网站开启gzip是非常有必要的。那么我们来看看nginx和apache分别怎么开启gzip压缩吧
Nginx怎么开启gzip压缩
#打开gzip压缩 gzip on; #不压缩临界值,大于1K的才压缩,一般不用改 gzip_min_length 1k; #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流,这里设置以16k为单位的4倍申请内存 gzip_buffers 4 16k; #默认为http 1.1,现在99.99%的浏览器基本上都支持gzip解压了,所有无需设置此项 #gzip_http_version 1.0; #gzip压缩比,1 最小处理速度最快,9 最大但处理最慢(传输快但比较消耗cpu) gzip_comp_level 2; #要压缩的文件类型,注意"text/html"类型无论是否指定总是会被压缩的 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php image/jpeg image/gif image/png; #on的话会在Header里增加"Vary: Accept-Encoding",给代理服务器用的,有的浏览器支持压缩, 有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩 #我这里的浏览器肯定支持gzip压缩,所以就不开启此功能了 gzip_vary off; #IE6对Gzip不怎么友好,不给它Gzip压缩了 gzip_disable "MSIE [1-6]\.";
Apache怎么开启gzip压缩
# BEGIN GZIP #apache开启gzip压缩,前提要装gzip模块哦 AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript # END GZIP
现在重启一下apache或nginx 即可,那么要如何检查是否正确开启gzip呢,我们可使用下面php代码:
//采用 gzip压缩网页 //file_get_contents 直接获得的网页是乱码。 header('Content-Type:text/html;charset=utf-8' ); $url = 'https://cloud-ping.com'; $file = fopen($url, "rb"); //只读2字节 如果为(16进制)1f 8b (10进制)31 139则开启了gzip ; $bin = fread($file, 2); fclose($file); $strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $isGzip = 0; switch ($typeCode) { case 31139: //网站开启了gzip $isGzip = 1; break; default: $isGzip = 0; } $url = $isGzip ? "compress.zlib://".$url:$url; // 三元表达式 $mierHtml = file_get_contents($url); //获得云测速数据 $mierHtml = iconv("gbk","utf-8",$mierHtml); echo $mierHtml;
//例2代码如下: <?php /* php 判断url页面是否使用gzip压缩 */ $ch = curl_init("https://cloud-ping.com/");//url不能有转向 curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate')); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $buffer = curl_exec($ch); $curl_info = curl_getinfo($ch); curl_close($ch); $header_size = $curl_info["header_size"]; //头部信息长度 $headers = substr($buffer, 0, $header_size); //获取头部信息 $body = substr($buffer, $header_size); //获取网页内容 function getEncoding(&$headers){ $arr=explode("rn",trim($headers)); array_shift($arr); foreach($arr as $header){ list($k,$v)=explode(':',$header); if ('content-encoding'==strtolower($k)){ return trim($v); } } return false; } $encoding=getEncoding($headers); if ($encoding) { echo "Using: ".$encoding; }else{ echo "None"; } ?>
快去试试吧,压缩后资源文件变得小了很多,加载速度也快了不少。可见,gzip压缩是页面性能优化的一种有效方式。