Gzip是什么
复制大神们的解释吧:
GZIP
最早由Jean-loup Gailly
和Mark Adler
创建,用于UNIX
系统的文件压缩。我们在Linux中经常会用到后缀为.gz
的文件,它们就是GZIP
格式的。现今已经成为Internet
上使用非常普遍的一种数据压缩格式,或者说一种文件格式。HTTP
协议上的GZIP
编码是一种用来改进WEB应用程序
性能的技术。大流量的WEB
站点常常使用GZIP
压缩技术来让用户感受更快的速度。这一般是指WWW
服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的40%
.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的.
Gzip压缩率
举个例子,通过webpack
打包后的js文件比较大,虽然我们可以利用chunk
功能将文件分开混淆打包,但是总体积还是不小;这时候看看利用gzip压缩的效果:
对比其中三个文件前后压缩大小:
文本类文件:
- iview.min.js:
429kb
->109kb
,压缩比74.6%
- base.min.js:
309kb
->81.7kb
,压缩比73.56%
- style.min.css:
207kb
->30.9kb
,压缩比85%
图片:
- 图片1:
63.2kb
->63.2kb
,压缩比0%
?
我们看到文本类文件的压缩效果非常显著,但是图片体积没变。看一下文本类的http响应头
是有gzip压缩过:
而图片的没有:
这是因为一般对于图片(png,jpg等)使用
gzip
的效果不好甚至恰得其反,所以一般都默认对图片不进行gzip
压缩。
node.js启用gzip
下面说一下node的express
框架如何使用gzip:
1.安装一个compression
依赖:
npm install compression
2.调用:
var compression = require('compression')
var app = express();
//尽量在其他中间件前使用compression
app.use(compression());
基本的使用就是这样就ok了,另外如果想只对某些请求使用此功能,可以使用它的过滤方法:
app.use(compression({filter: shouldCompress}))
function shouldCompress (req, res) {
if (req.headers['x-no-compression']) {
// 这里就过滤掉了请求头包含'x-no-compression'
return false
}
return compression.filter(req, res)
}
其他的功能请参考compression
的文档。
在nginx如何开启
nginx也支持gzip压缩。下面为配置方法:
#on为启用,off为关闭
gzip on;
#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_min_length 1k;
#获取多少内存用于缓存压缩结果,‘4 16k’表示以16k*4为单位获得
gzip_buffers 4 16k;
#gzip压缩比(1~9),越小压缩效果越差,但是越大处理越慢,所以一般取中间值
gzip_comp_level 5;
#对特定的MIME类型生效,其中'text/html’被系统强制启用
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
感谢阅读!