umi/webpack + nginx 启用gzip,优化请求文件大小,加快首屏渲染速度

nginx压缩分为两种模式

  • 动态压缩(压缩工作由nginx服务器完成,会消耗服务器资源)
  • 静态压缩(压缩工作在build的时候就打包好.gz资源,服务器优先返回.gz资源)

一、动态压缩(服务器压缩)

只需要在 nginx.conf 文件中做如下修改即可:

# 开启和关闭gzip模式
gzip on;
# gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
gzip_buffers 4 16k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.0;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 2;
# 进行压缩的文件类型
gzip_types text/plain application/javascript text/css application/xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

二、静态压缩(构建时就生成.gz资源)

1、安装 compression-webpack-plugin 插件

npm install compression-webpack-plugin

2、webpack配置

...
chainWebpack: function (config: any) {
	if (process.env.NODE_ENV === 'production') {
	    //gzip压缩
	    config.plugin('compression-webpack-plugin').use(CompressionPlugin, [
	      {
	        test: /\.(js|css)$/, //匹配文件名
	        threshold: 10240, //对超过10k的数据压缩
	        deleteOriginalAssets: false, //删除源文件
	      },
	    ]);
  }
}
...

3、build后查看构建产物是否存在.gz的资源

在这里插入图片描述

4、nginx开启gzip:

静态压缩会直接将产物中预先压缩过的 .gz文件发送给浏览器,而不再实时压缩文件,如果找不到 .gz文件,将会使用对应的原始文件。

a 、安装nginx模块http_gzip_static_module,该模块默认关闭,直接使用会报错:unknown directive “gzip_static”

查看是否开启

nginx -V 2>&1| grep -o http_gzip_static_module

开启模块

// 清空之前编译的内容
make clean
// 配置
./configure --with-http_gzip_static_module
// 编译
make && make install

注意:对于Docker的nginx:alpine不需要处理,直接下一步配置即可

b、配置nginx

gzip_static  on;
gzip_proxied expired no-cache no-store private auth;

静态资源的MIME类型可能会出现错误

此时,页面可能会加载空白,控制台报错

Failed to load module script: Expected a JavaScript module script but the <img src="server" alt="" width="100%" /> responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.

报错的原因是返回的js 和 css Content-Type变成了 text/html,浏览器无法识别,修改如下:

// 针对出现MIME类型错误的文件,单独再配置gzip_static
location ~ \.(js|mjs|json|css|html)$ {
  gzip_static on;
}

参考引用:
https://juejin.cn/post/7202896198607454245
https://blog.csdn.net/fxss5201/article/details/106535475

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值