前端性能优化--减少首屏加载时间--gzip压缩

前言:在项目build(vue、react…)之后,我们再使用gzip做一下压缩这些静态资源,让用户请求这些资源的大小会降低很多,从而达到减少首屏加载时间的目标,而gzip压缩主要分为两种“动态压缩”“静态压缩”

动态压缩

指的是在服务器上进行配置,使得每次用户在访问页面时,即发起http请求到服务器,服务器就会自动把你访问的资源先压缩成.gz文件,然后浏览器下载之后再进行解压,从而达到提高访问效率的特点。

步骤(服务器以nginx为例):

打开nginx的配置文件:
前端性能优化--减少首屏加载时间--gzip压缩_第1张图片

gizp on;注释打开,表示启动gzip压缩,然后并加入如下配置在其下面:

  • gzip_comp_level 5; // 表示压缩级别,有1-9的级别可选,默认值为1,级别越高压缩得越厉害,但同样对服务器的性能要求越高,所以不是越高越好,也许你设置的越高,所需要的服务器的GPU资源越多,压缩的耗时越长,导致总共的请求时间还反而变长了,所以应该视情况而定。
  • gzip_min_length 2k; // 表示压缩的最低大小,默认20k,比如我这里写的是2k,就表示该文件大小如果大于2k了,就采用gzip压缩,否则不压缩
  • gzip_types application/javascript text/css; // 表示要压缩的MIME类型,默认值:text/html,如果请求的MIME类型不在这里面,就不压缩

修改成如下:

前端性能优化--减少首屏加载时间--gzip压缩_第2张图片

动态压缩优化效果:

文件大小优化变化
前端性能优化--减少首屏加载时间--gzip压缩_第3张图片

取出同一个文件的响应头变化
前端性能优化--减少首屏加载时间--gzip压缩_第4张图片

静态压缩

指通过前端提前将静态文件压缩成.gz文件,然后再放在服务器上,这样浏览器访问资源的时候,服务器就不用另外花费GPU来压缩这些文件了,因为你已经提前压缩好了,相对于动态压缩会更好一些。

步骤:

1、安装compression-webpack-plugin,

命令:

  npm install compression-webpack-plugin -D

  yarn add compression-webpack-plugin -D

2、webpack中配置(不同的框架的脚手架配置文件方法不同,所以这里就统一列出webpack的配置):

 	const CompressionWebpackPlugin = require('compression-webpack-plugin')
    
    const productionGzipExtensions = ['js','css']
    
    // 配置compression-webpack-plugin
    new CompressionWebpackPlugin({
      algorithm:'gzip', // 可以是 (buffer, cb) => cb(buffer) 或者是使用 zlib 里面的算法的 {String}
      test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), //处理所有匹配此 {RegExp} 的资源
      threshold:10240, //只处理比这个值大的资源。按字节计算,即这里的10240为10kb,也就是文件大小大于10kb的才处理
      minRatio: 0.8 //只有压缩率比这个值小的资源才会被处理
    })

3、打开nginx压缩包目录,依次执行命令下载相关nginx模块

#  usr/local/nginx-1.20.0

./configure http_gzip_static_module

make && make install

4、在服务器上配置,这里以nginx为例,打开nginx的配置文件
前端性能优化--减少首屏加载时间--gzip压缩_第5张图片
重启nginx即可,优化后的效果:前端性能优化--减少首屏加载时间--gzip压缩_第6张图片
*注意:无论是哪种方式,只要修改过nginx配置,都要重启才能生效

最后,优化对比:

文件:main.28acee27.js

情况 大小 请求时间
未优化 2.6M 34.53s
动态gzip 730KB 8.64s
静态gzip 719KB 6.58s

文件:main.5acf62b1.css

情况 大小 请求时间
未优化 783kb 10.41s
动态gzip 112KB 286ms
静态gzip 108KB 466ms

可见优化效果还是很显著的,还有其他方法看我文章

你可能感兴趣的:(前端性能优化,前端,性能优化,nginx)