我们最近做的一个项目,出现了网站第一次打开非常慢的情况。稍微分析一下,就能看出问题。原来是第一次打开要那些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 指定后端服务器地址
修改完配置,重启一下nginx服务就可以了。

2、通过springboot配置文件配置开启gzip压缩

因为我们是springboot的项目,所以我们也可以通过springboot的配置文件来开启gzip压缩。

如果配置文件是application.yml,那么配置如下:
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
如果配置文件是application.properties,那么配置如下:
# 开启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字节以上的内容,如果我们按这个默认值的话,也可以不配置。

还有,mime-types,在spring2.0+的版本中,默认值如下,所以一般我们也不需要特意添加这个配置。
// 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、测试效果

开启gzip压缩之后,清掉浏览器缓存,重新访问网站,果然快了很多!

F12看一下,响应头Content-Encoding值为:gzip,说明gzip压缩已经生效了。

作者 admin

发表评论

您的电子邮箱地址不会被公开。