最近在作项目的时候用到了gzip,发现它的压缩能力仍是很强大的,基本可以压缩50%的文本文件大小。之前有所了解,但不够深刻,如今详细了解下。javascript
根据百度百科的解释:gzip是GNUzip的缩写,它是一个GNU自由软件的文件压缩程序。
减小文件大小有两个明显的好处,一是能够减小存储空间,二是经过网络传输文件时,能够减小传输的时间。因此gzip被普遍用在网络传输上,毕竟可以节省传输的时间嘛。gzip算法了解php
我使用的php的codeigniter框架,在框架中能够经过配置开启gzip压缩。原理是加载zlib扩展,而后调用相关函数进行压缩,参考。这里有一个很明显缺点是,你不能过早地输出一些东西给你的浏览器。什么意思呢,就是你不能在压缩前,就输出内容,一个空格也不行,不然会出现整个页面的空白。好比,你有一个变量忘记设置了,出现了php警告,那么整个页面都显示不出来。这无疑是很不友好的。固然,生产环境不多出现提早输出的问题,可是,万一有问题,整个页面显示不了也太致命了。并且还有别的缺点,好比没法对javascript,css和其余图片文件进行压缩,因此对于web传输来讲,使用php不是一个最好的选择。css
更好的选择,我以为是经过web服务器进行压缩。使人高兴的是,各大主流web服务器都提供了 gzip 压缩功能呀。好比说,在 nginx 服务器中,只要在配置文件 nginx.conf 中加上一些gzip的配置,参考, 一个简单的配置便可。注意在 gzip_types 这个配置项加上你须要压缩的文件类型。html
我作了对比试验:java
压缩前:
nginx
压缩后
web
93.5kb变成30多kb, 差异仍是很大的。算法
我没有本身作试验,参考网上的文章,gzip 对于文本文件的压缩率较高,对于图片的压缩率有限。浏览器
优势固然很明显了,就是能够减小文件大小,提升传输的速率。 缺点是,压缩的过程会增长服务器的运算量,影响服务器的性能。因此,gzip的压缩级别不能开过高了。这里还有一个优化方案,可让nginx加载http_gzip_static_module 模块,看名字就知道了,就是本身先生成一个同名的静态的gzip文件,这样就不用每次都压缩了。能够参考。服务器