Vue 开启gzip压缩

629 阅读2分钟

适用版本 vue2.6 【我当时的版本】

安装

npm i compression-webpack-plugin@5.0.1

使用

vue.config.jsconst CompressionWebpackPlugin = require('compression-webpack-plugin');module.exports = {
      // 开启gzip压缩
     config.plugin('CompressionWebpackPlugin').use(CompressionWebpackPlugin, [
        {
          filename: '[path][base].gz',
          algorithm: 'gzip',
          test: new RegExp('\.(js|css)$'),
          // 只处理大于xx字节 的文件,默认:0
          threshold: 10240,
          // 示例:一个1024b大小的文件,压缩后大小为768b,minRatio : 0.75
          minRatio: 0.8, // 默认: 0.8
          // 是否删除源文件,默认: false          deleteOriginalAssets: false
         }
     ])
}

注意

VUE打包时出现Cannot read property ‘tapPromise‘ of undefined问题
使用VUE webpack进行打包时出现了 ERROR TypeError:Cannot read property ‘tapPromise‘ of undefined问题,
检查后发现是compression-webpack-plugin版本问题,通过降低版本可以临时解决此类问题

compression-webpack-plugin 目前最新版是 8.0.0

运行命令:

①、先执行卸载命令:npm uninstall compression-webpack-plugin

②、执行安装命令:npm i compression-webpack-plugin@5.0.1

ng配置  服务器在线压缩

需要后端配合啦~~

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 开启gzip
    gzip  on;
    
    # 设置缓冲区大小
    gzip_buffers 4 16k;
    
    #压缩级别官网建议是6
    gzip_comp_level 6;
 
    #压缩的类型
    gzip_types  
    
                text/plain application/javascript                 
                application/x-javascript                 
                ext/javascript text/css application/xml;    server {
                listen       8462;
                server_name  localhost;

        location / {
            root   dist;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

响应头中会携带gzip压缩配置,每次请求xx.js文件,服务器都会进行实时压缩

image.png

优缺点

两种方案的优缺点:

1、webpack打包,然后直接使用静态的gz,   缺点就是打包后文件体积太大,但是不耗服务器性能;
2、使用nginx在线gzip,   缺点就是耗性能,需要实时压缩,但是vue打包后的文件体积小。

两种配置

`

1、有gz文件的时候进行静态压缩,

2、不存在gz文件的时候进行在线压缩而不是加载源文件,

gzip on;
gzip_static on;
gzip_comp_level 2;
gzip_types text/plain text/html text/css application/x-javascript text/xml 
            application/xml application/xml+rss text/javascript;  
首先,gzip_static的优先级高,会先加载静态gz文件,当同目录下不存在此文件的时候,会执行在线压缩的命令。

区分

响应头的Content-Edcoding:gzip 表示gzip 压缩已经生效,而Etag中只有简单字符表示静态资源加载,

image.png

而前面带 W/ 表示启动了在线压缩

image.png