玩转vite性能优化

Vite 本身因其原生 ESM、基于 esbuild 的极速构建和开发性能而被视为性能优秀的构建工具。但在大型项目中,Vite 性能依然可以进一步优化,主要可以从 开发时性能(dev server)构建性能(build) 两大方向入手。

🔧 一、开发阶段性能优化(vite dev

1. ✅ 优化依赖预构建(预打包)

Vite 会自动通过 esbuild 对依赖进行预构建(预打包),加快冷启动速度。

  • 配置优化
ts 复制代码
optimizeDeps: {
  include: ['lodash-es', 'dayjs'], // 指定预构建依赖(避免动态导入不被识别)
  exclude: ['jspdf'],     // 排除某些大型包,避免打包过慢,该用cdn方式引入、例如video.js 、 jspdf等
}

2. ✅ 禁用不必要插件 / 中间件

  • 一些插件(如 legacy、PWA、自动生成路由)会导致开发服务器变慢
  • 推荐:仅在 build 环境中使用插件
ts 复制代码
plugins: isBuild ? [legacy(), compress(), visualizer()] : [vue()];
  1. legacy 插件:用于兼容旧版浏览器,如 IE11。
  2. compress 插件:用于压缩资源文件。
  3. visualizer 插件:用于可视化打包分析。

3. ✅ 减少热更新开销(HMR)

  • 避免巨型模块(如 store/index.ts)频繁被修改
  • 拆分为小模块,按需 import,可提升 HMR 速度
  • 使用 defineOptions() / defineStore() 替代手动注册模块

4. ✅ 提升冷启动速度

  • 开启缓存(Vite 默认缓存到 node_modules/.vite
  • 避免项目根目录下存在大量无关文件(如 .git, dist, temp, 大图像等)
  • 设置 server.watch.ignored 忽略监听无关路径:
ts 复制代码
server: {
  watch: {
    ignored: ['**/dist/**', '**/.git/**'],
  },
}

📦 二、构建阶段优化(vite build

1. ✅ 合理使用 Rollup 选项

ts 复制代码
build: {
  rollupOptions: {
    output: {
      manualChunks(id) {
        if (id.includes('node_modules')) {
          return 'vendor' // 将 node_modules 单独打包
        }
      }
    }
  }
}

2. ✅ 开启构建缓存

  • 构建缓存是 Vite 4.x 后期引入的功能(通过 plugin 或自建缓存层)
  • 可配合 turbo, nx, vite-plugin-cache 实现增量构建

3. ✅ 开启 CSS 代码分离 + 压缩

ts 复制代码
build: {
  cssCodeSplit: true,
  minify: 'esbuild', // 或 'terser',但 esbuild 更快
}

4. ✅ 压缩体积 + 可视化分析

插件推荐:

🌐 三、网络优化(适用于部署后)

✅ 配合使用:

  • HTTP/2
  • CDN 静态资源缓存
  • SSR with streaming (如 Vue SSR、React Server Component)
  • 使用 vite-ssg 进行预渲染(静态化)

🧩 插件辅助优化(推荐)

插件 用途
vite-plugin-imp 按需引入组件库(如 antd)
vite-plugin-compression Gzip/Brotli 压缩
vite-plugin-inspect 插件执行链调试工具
vite-plugin-cache 缓存构建文件,加速构建
rollup-plugin-visualizer 打包体积分析

🎯 实战推荐:性能优化 Checklist

阶段 优化项 建议
开发 缓存 node_modules/.vite ✅ 开启增量预构建
开发 HMR 变慢 ✅ 拆分模块,避免巨型文件
构建 构建慢 ✅ 使用 manualChunks, 开启缓存
构建 包大 ✅ 动态导入,gzip 压缩,Tree Shaking
构建 编译慢 ✅ 使用 esbuild 替代 babel / terser
构建 依赖大 ✅ 替换大型库,如 moment → dayjs

相关推荐
小豆包api1 天前
小豆包AI API × Nano Banana:3D手办 + AI视频生成,「动起来」的神级玩法!
前端·api
布列瑟农的星空1 天前
大话设计模式——观察者模式和发布/订阅模式的区别
前端·后端·架构
龙在天1 天前
Vue3 实现 B站 视差 动画
前端
KenXu1 天前
F2C Prompt to Design、AI 驱动的设计革命
前端
小鱼儿亮亮1 天前
canvas中画线条,线条效果比预期宽1像素且模糊问题分析及解决方案
前端·react.js
@大迁世界1 天前
用 popover=“hint“ 打造友好的 HTML 提示:一招让界面更“懂人”
开发语言·前端·javascript·css·html
伍哥的传说1 天前
Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
前端·css·rust·tailwindcss·tailwind css v4·lightning css·utility-first
小鱼儿亮亮1 天前
使用Redux的combineReducers对数据拆分
前端·react.js
定栓1 天前
Typescript入门-类型断言讲解
前端·javascript·typescript
码间舞1 天前
你不知道的pnpm!如果我的电脑上安装了nvm,切换node版本后,那么pnpm还会共享一个磁盘的npm包吗?
前端·代码规范·前端工程化