开启成长之旅!这是我参加「日新方案 12 月更文挑战」的第20天,点击查看活动概况
前语
HTTP 能够对传输的内容进行紧缩,减少网络实践传输数据的巨细。服务器会将资源进行紧缩后传输到客户端,浏览器收到文件后进行解析。关于纯文本文件能够紧缩到之前巨细的30%-40%,大大提高了传输功率。
什么是gzip
gzip是一种数据的紧缩格式,也能够说是文件格式。linux体系该文件后缀为.gz
。运用gzip需求web容器,浏览器的支撑。
- 装备 js、text、json、css 这种纯文本进行紧缩,功率极高
- 紧缩需求消化CPU,关于大文件(音乐/视频/图片)的紧缩,会添加服务器压力。
Nginx装备gzip
进入nginx装备文件(betpw.conf是我自己项目的nginx装备文件)
cd /etc/nginx/conf.d
vi /betpw.conf
# 开启gzip,封闭用off
gzip on;
# 是否在http header中添加Vary: Accept-Encoding,主张开启
gzip_vary on;
# gzip 紧缩等级,1-9,数字越大紧缩的越好,也越占用CPU时间,引荐6
gzip_comp_level 6;
# 设置紧缩所需求的缓冲区巨细
gzip_buffers 16 8k;
# 设置gzip紧缩针对的HTTP协议版本
gzip_http_version 1.1;
# 挑选紧缩的文件类型,其值能够在 mime.types 文件中找到。
gzip_types text/plain text/css application/json application/javascript
# 启用gzip紧缩的最小文件,小于设置值的文件将不会紧缩
gzip_min_length 1k;
config.js装备
- 装置compression-webpack-plugin
npm i compression-webpack-plugin --save-dev
- 引入
var CompressionWebpackPlugin = require('compression-webpack-plugin')
- 装备(chainWebpack/configureWebpack两种方法)
// gzip需求nginx进行配合
chainWebpack(config) {
config
.plugin('compression')
.use(CompressionWebpackPlugin)
.tap(() => [
{
new CompressionPlugin({
//此插件不能运用太高的版本,否则报错:TypeError: Cannot read property 'tapPromise' of undefined
// filename: "[path][base].gz", // 这种方法是默许的,多个文件紧缩就有多个.gz文件,主张运用下方的写法
filename: '[path].gz[query]', // 使得多个.gz文件合并成一个文件,这种方法紧缩后的文件少,主张运用
algorithm: 'gzip', // 官方默许紧缩算法也是gzip
test: /.js$|.css$|.html$|.ttf$|.eot$|.woff$/, // 运用正则给匹配到的文件做紧缩,这里是给html、css、js以及字体(.ttf和.woff和.eot)做紧缩
threshold: 10240, //以字节为单位紧缩超越此巨细的文件,运用默许值10240吧
minRatio: 0.8, // 最小紧缩比率,官方默许0.8
//是否删去原有静态资源文件,即只保存紧缩后的.gz文件,主张这个置为false,还保存源文件。以防:
// 假如出现拜访.gz文件拜访不到的时分,还能够拜访源文件两层保障
deleteOriginalAssets: false
}
])
}
configureWebpack: config => {
// 开发环境不装备
if (process.env.NODE_ENV !== 'production') return
// 生产环境才去装备
return {
plugins: [
new CompressionPlugin({
filename: '[path].gz[query]',
algorithm: 'gzip',
test: /.js$|.css$|.html$|.ttf$|.eot$|.woff$/,
threshold: 10240,
minRatio: 0.8,
deleteOriginalAssets: false
})
]
}
},
附nginx中gzip装备参数
-
gzip:决议是否开启gzip模块
param:on |off
-
gzip_proxied:Nginx做为反向代理的时分启用
param:off
| expired | no-cache | no-sotre | private | no_last_modified | no_etag | auth | any- off:封闭一切的代理成果数据紧缩
- expired:header中包括”Expires”头信息时启用紧缩
- no-cache:header中包括”Cache-Control:no-cache”头信息时启用紧缩
- no-store:header中包括”Cache-Control:no-store”头信息时启用紧缩
- private:header中包括”Cache-Control:private”头信息时启用紧缩
- no_last_modified:header中包括”Last_Modified”头信息时启用紧缩
- no_etag:header中包括“ETag”头信息时启用紧缩
- auth:header中包括“Authorization”头信息
- any:无条件紧缩一切成果数据
-
gzip_buffers:处理恳求紧缩的缓冲区数量和巨细,其间number:指定Nginx服务器向体系请求缓存空间个数,size指的是每个缓存空间的巨细。主要实现的是请求number个每个巨细为size的内存空间。这个值的设定一般会和服务器的操作体系有关,所以主张此项不设置,运用默许值即可。
param1:int 添加的倍数,param2:int(k) 后面单位是k,example:gzip_buffers 4 16K; -
gzip_comp_level:设置gzip紧缩等级,等级越底紧缩速度越快文件紧缩比越小,反之速度越慢文件紧缩比越大,
默许值为1
-
gzip_min_length:当回来内容大于此值时才会运用gzip进行紧缩,以K为单位,当值为0时,一切页面都进行紧缩。
进行紧缩呼应页面的最小长度,content-length
gzip紧缩功用对大数据的紧缩效果显着,可是如果要紧缩的数据比较小的化,可能出现越紧缩数据量越大的情况,因此咱们需求根据呼应内容的巨细来决议是否运用Gzip功用,呼应页面的巨细能够通过头信息中的Content-Length来获取。可是怎么运用了Chunk编码动态紧缩,该指令将被疏忽。主张设置为1K或以上,默许为20
-
gzip_http_version:用于辨认http协议的版本,早期的浏览器不支撑gzip紧缩,用户会看到乱码,所以为了支撑前期版本加了此选项,现在此项基本能够疏忽
param: 1.0|1.1
-
gzip_types: 设置需求紧缩的MIME类型,非设置值不进行紧缩
param:text/html
| application/x-javascript | text/css | application/xml -
gzip_vary on: 该指令用于设置运用gzip进行紧缩发送是否携带“Vary:Accept-Encoding”头域的呼应头部。主要是告知接收方,所发送的数据经过了Gzip紧缩处理
param:on |off