我们最近做的一个项目,出现了网站第一次打开非常慢的情况。稍微分析一下,就能看出问题。原来是第一次打开要那些js、css什么的,加起来要加载好几M。网速要是慢一点,打开一个首页都要20几秒。
那么,要怎么解决呢?优化点之一就是开启gzip压缩。
开始之前,我们先了解一下gzip是什么?
Gzip是一种数据压缩算法,通过将文本、样式表、脚本和其他可压缩的内容压缩成更小的文件,从而减少传输数据量。
当浏览器支持Gzip并请求网页时,服务器会将响应的内容进行压缩,并在浏览器端解压缩,实现数据传输的优化。
通过开启Gzip压缩,您可以加速网站的加载速度,减少带宽使用,提升用户体验。
了解完gzip是什么,我们来看一下怎么开启gzip压缩。
1、通过nginx开启gzip压缩
通过nginx开启gzip压缩,是一种很通用的方法。
打开nginx的配置文件nginx.conf,添加gzip相关配置,具体配置如下:
http {
# 开启压缩功能
gzip on;
# 设置压缩级别
gzip_comp_level 5;
# 设置压缩类型
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 设置最小压缩文件大小
gzip_min_length 1k;
# 设置压缩缓冲区大小
gzip_buffers 4 32k;
# 设置压缩后数据的缓存时间
gzip_proxied any;
# 设置压缩比例
gzip_vary on;
# 过滤掉IE6等不支持压缩的浏览器
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
...
server {
listen 80;
server_name abc.acvy.com;
...
location / {
# 将压缩后的数据发送给客户端
gzip_static on;
# 转发请求给后端服务器
proxy_pass http://backend;
}
}
...
}
-
gzip on 表示开启压缩功能 -
gzip_comp_level 5 表示设置压缩级别为 5 -
gzip_types 指定要压缩的文件类型 -
gzip_min_length 指定最小压缩文件大小 -
gzip_buffers 指定压缩缓冲区大小 -
gzip_proxied 指定缓存时间 -
gzip_vary 表示启用 Vary 头,用于支持代理缓存 -
gzip_static on 表示将压缩后的数据发送给客户端 -
proxy_pass 指定后端服务器地址
2、通过springboot配置文件配置开启gzip压缩
因为我们是springboot的项目,所以我们也可以通过springboot的配置文件来开启gzip压缩。
server:
compression:
# 开启Gzip压缩
enabled: true
# 最小压缩大小
min-response-size: 2048
# 要进行压缩的响应类型
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
# 开启Gzip压缩
server.compression.enabled=true
# 最小压缩大小
server.compression.min-response-size=2048
# 要进行压缩的响应类型
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
-
server.compression.enabled true表示开启Gzip压缩 -
server.compression.min-response-size 表示最小压缩大小 -
server.compression.mime-types 表示要进行压缩的响应类型
上面的min-response-size默认是2048,仅会压缩2048字节以上的内容,如果我们按这个默认值的话,也可以不配置。
// org.springframework.boot.web.server.Compression#mimeTypes
/**
* Comma-separated list of MIME types that should be compressed.
*/
private String[] mimeTypes = new String[] { "text/html",
"text/xml",
"text/plain",
"text/css",
"text/javascript",
"application/javascript",
"application/json",
"application/xml" };
也就是说,默认情况下我们只需配置
server:
compression:
# 开启Gzip压缩
enabled: true
或者
# 开启Gzip压缩
server.compression.enabled=true
就可以了。
修改完,我们也要重启一下应用服务。
3、测试效果
F12看一下,响应头Content-Encoding值为:gzip,说明gzip压缩已经生效了。