1、nginx开启gzip模式

  1. server {
  2. listen 8103;
  3. server_name ***;
  4. # 开启gzip
  5. gzip on;
  6. # 进行压缩的文件类型
  7. gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/png image/gif;
  8. # 是否在http header中添加Vary: Accept-Encofing,建议开启
  9. gzip_vary on;
  10. }
  1. ...
  2. http {
  3. ...
  4. gzip on;
  5. gzip_min_length 1k;
  6. gzip_buffers 4 16k;
  7. #gzip_http_version 1.1;
  8. gzip_comp_level 2; # 压缩级别
  9. # 要压缩的mine类型
  10. gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss image/jpeg image/gif image/png image/svg+xml;
  11. gzip_vary off;
  12. gzip_proxied expired no-cache no-store private auth;
  13. #IE6不支持gzip
  14. gzip_disable "MSIE [1-6]\.";
  15. ...
  16. }

2、Vue开启gzip

2.1 安装依赖

compression-webpack-plugin - npm
https://www.npmjs.com/package/compression-webpack-plugin

  1. npm install compression-webpack-plugin@6.1.1 --save-dev
  2. npm install compression-webpack-plugin --save-dev
  3. yarn add -D compression-webpack-plugin
  4. pnpm add -D compression-webpack-plugin

2.2 配置gzip

config —> index.js

  1. build: {
  2. productionGzip: true,
  3. productionGzipExtensions: ['js', 'css']
  4. }

webpack.config.js

  1. const CompressionPlugin = require("compression-webpack-plugin");
  2. module.exports = {
  3. plugins: [new CompressionPlugin()],
  4. };

最终优化后的效果如下图:vendor.js文件从1M以上优化到256K左右,体积减少接近80%,排除服务器影响的因素,界面渲染速度基本都在1s左右,达到秒开效果,比之前快
了太多,体验一下就上来了嘻嘻。

开启 br 压缩

当前 br 压缩是在 nginx 服务器进行且并未缓存资源,因此每次请求都需要对资源进行压缩之后发出,考虑服务器性能,压缩级别设置为 6。
现在改为客户端压缩,服务器在接收请求时直接把压缩文件发出,减少服务器压力。同时客户端压缩可以把压缩级别调整至最高的 11,整体资源大小会再次下降,使用 compression-webpack-plugin 实现。

  1. yarn add zlib -D
  1. const CompressionWebpackPlugin = require('compression-webpack-plugin');
  2. const zlib = require('zlib');
  3. if (!isDev) {
  4. plugins.push(
  5. new CompressionWebpackPlugin({
  6. filename: '[path].br[query]',
  7. algorithm: 'brotliCompress',
  8. test: /\.js$|\.css$|\.html$/,
  9. //test: /.(js|css|json|txt|html|ico|svg)(?.*)?$/i,
  10. compressionOptions: {
  11. params: {
  12. [zlib.constants.BROTLI_PARAM_QUALITY]: 11,
  13. },
  14. },
  15. threshold: 1024,
  16. minRatio: 0.99,
  17. //删除原始文件只保留压缩后的文件
  18. deleteOriginalAssets: false,
  19. }),
  20. );
  21. }

image.png
br压缩后更小
image.png
image.png