Gzip是什么

复制大神们的解释吧:


​GZIP​​​最早由​​Jean-loup Gailly​​​和​​Mark Adler​​​创建,用于​​UNIX​​​系统的文件压缩。我们在​​Linux​​​中经常会用到后缀为​​.gz​​​的文件,它们就是​​GZIP​​​格式的。现今已经成为​​Internet​​​ 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。​​HTTP​​​协议上的​​GZIP​​​编码是一种用来改进​​WEB应用程序​​​性能的技术。大流量的​​WEB​​​站点常常使用​​GZIP​​​压缩技术来让用户感受更快的速度。这一般是指​​WWW​​​服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对纯文本内容可压缩到原大小的​​40%​​.这样传输就快了,效果就是你点击网址后会很快的显示出来.当然这也会增加服务器的负载. 一般服务器中都安装有这个功能模块的.


Gzip压缩率

举个例子,通过​​webpack​​打包后的js文件比较大,虽然我们可以利用​​chunk​​功能将文件分开混淆打包,但是总体积还是不小;这时候看看利用gzip压缩的效果:

Node.js服务器启用Gzip压缩_字节数 启用Gzip前


Node.js服务器启用Gzip压缩_服务器_02 启用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压缩过:


Node.js服务器启用Gzip压缩_javascript_03 image.png

而图片的没有:

Node.js服务器启用Gzip压缩_javascript_04 image.png

这是因为一般对于图片(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的配置

#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; 

感谢阅读!


作者:doterlin
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。