vue项目纵享丝滑,如何让资源加速度从秒(s)优化到毫秒级(ms)

1.安装插件

首先安装 compression-webpack-plugin 插件,用于在构建时生成 .gz 压缩文件:

css 复制代码
bash
深色版本
npm install compression-webpack-plugin --save-dev

2. 配置 vue.config.js

在 Vue 项目根目录下创建或修改 vue.config.js,添加以下配置:

javascript 复制代码
javascript
深色版本
const CompressionWebpackPlugin = require('compression-webpack-plugin');

module.exports = {
  // 其他配置...
  configureWebpack: {
    plugins: [
      new CompressionWebpackPlugin({
        // 压缩算法(默认gzip)
        algorithm: 'gzip',
        // 匹配需要压缩的文件类型(如JS、CSS、HTML等)
        test: /.(js|css|html|svg|json)$/,
        // 只压缩大于该值的文件(单位:字节,10KB)
        threshold: 10240,
        // 压缩率阈值(压缩后小于原文件的80%才会生成.gz文件)
        minRatio: 0.8,
        // 是否删除原始未压缩文件(生产环境建议设为false,保留原始文件)
        deleteOriginalAssets: false,
        // 自定义压缩后的文件名(如:main.js → main.js.gz)
        filename: (path) => `${path}.gz`,
      }),
    ],
  },
};

3. 构建项目

执行构建命令生成压缩文件:

arduino 复制代码
bash
深色版本
npm run build

构建完成后,dist 目录下会生成原始文件(如 app.js)和对应的 .gz 压缩文件(如 app.js.gz)。


二、服务器配置(以 Nginx 为例)

1. 启用 Nginx 的 Gzip 支持

在 Nginx 配置文件中(通常位于 /etc/nginx/nginx.conf 或站点配置文件中),添加或修改以下配置:

bash 复制代码
nginx
深色版本
http {
    # 开启Gzip压缩
    gzip on;
    # 设置压缩的最小文件大小(1KB)
    gzip_min_length 1k;
    # 压缩级别(1-9,推荐6,平衡压缩率和CPU消耗)
    gzip_comp_level 6;
    # 压缩缓冲区大小
    gzip_buffers 16 64k;
    # 需要压缩的文件类型
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
    # 兼容代理服务器
    gzip_proxied any;
    # 添加Vary头,避免缓存问题
    gzip_vary on;
    # 启用预压缩文件(直接使用已生成的.gz文件)
    gzip_static on;
}

2. 重启 Nginx

复制代码
bash
深色版本
sudo nginx -s reload

三、Apache 配置(可选)

如果使用 Apache,需确保已启用 mod_deflate 模块:

bash 复制代码
apache
深色版本
<IfModule mod_deflate.c>
    # 启用压缩
    AddOutputFilterByType DEFLATE text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml
    # 排除已压缩的文件类型(如图片)
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</IfModule>

四、验证 Gzip 是否生效

1. 检查 Network 面板

  1. 打开浏览器开发者工具(F12),切换到 Network 标签。
  2. 刷新页面,查看请求的响应头,确认 Content-Encoding: gzip 存在。
  3. 对比压缩前后的文件大小(如 app.jsapp.js.gz)。

2. 使用在线工具测试

通过工具如 GIDZip TestWebPageTest 检查压缩效果。


五、注意事项

  1. 预压缩 vs 实时压缩

    • 预压缩 :通过 Webpack 生成 .gz 文件,Nginx 直接返回,减少服务器 CPU 负担(推荐)。
    • 实时压缩:Nginx 动态压缩文件,适合动态生成内容,但可能增加 CPU 使用率。
  2. 删除原始文件

    • 如果设置 deleteOriginalAssets: true,构建时会删除未压缩的原始文件,但需确保服务器支持直接读取 .gz 文件(如配置 gzip_static on)。
  3. 压缩级别

    • 压缩级别 gzip_comp_level 越高,文件越小但 CPU 负担越大,建议设为 6
  4. 缓存问题

    • 清除浏览器缓存后重新测试,确保加载的是压缩后的文件。

六、完整示例

1. vue.config.js 完整配置

javascript 复制代码
javascript
深色版本
const CompressionWebpackPlugin = require('compression-webpack-plugin');

module.exports = {
  chainWebpack: config => {
    config.when(process.env.NODE_ENV === 'production', config => {
      config
        .plugin('compression')
        .use(CompressionWebpackPlugin, [{
          algorithm: 'gzip',
          test: /.(js|css|html|svg|json)$/,
          threshold: 10240,
          minRatio: 0.8,
          deleteOriginalAssets: false,
          filename: (path) => `${path}.gz`,
        }]);
    });
  },
};

2. Nginx 配置片段

ini 复制代码
nginx
深色版本
server {
    listen 80;
    server_name yourdomain.com;
    root /path/to/dist;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # 启用预压缩文件
    gzip_static on;
}

通过以上步骤,你的项目体积将会得到大幅减小,就可以纵享丝滑啦!

相关推荐
极客小俊25 分钟前
粘性定位Position:sticky属性是不是真的没用?
前端
云端看世界27 分钟前
ECMAScript 类型转换 下
前端·javascript
云端看世界30 分钟前
ECMAScript 运算符怪谈 下
前端·javascript
云端看世界31 分钟前
ECMAScript 函数对象实例化
前端·javascript
前端爆冲31 分钟前
基于vue和flex实现页面可配置组件顺序
前端·javascript·vue.js
云端看世界33 分钟前
ECMAScript 中的特异对象
前端·javascript
il35 分钟前
Deepdive into Tanstack Query - 2.1 QueryClient 基础
前端
_十六37 分钟前
看完就懂!用最简单的方式带你了解 TypeScript 编译器原理
前端·typescript
云端看世界39 分钟前
ECMAScript 运算符怪谈 上
前端·javascript·ecmascript 6
前端涂涂39 分钟前
express的介绍,简单使用
前端