Vite 前端构建优化:让打包快起来、体积瘦下来
【摘要】 Vite 靠浏览器原生 ESM 做开发服务器,构建则走 Rollup。聊聊怎么配依赖预构建、手动分包、开 gzip/brotli,以及用 rollup-plugin-visualizer 揪出体积大头。
一、先搞清楚构建走的是哪里
Vite 开发时偷懒用了浏览器原生 ESM,所以秒开;但 vite build 真正打包是交给 Rollup 的。也就是说,优化构建本质上是优化 Rollup 配置,外加 Vite 在它外面套的几层。
二、依赖预构建,别让第三方库拖死首屏
node_modules 里很多包还是 CommonJS,或者内部一堆小文件。Vite 默认会对它们做预构建(转 ESM + 合并),但有些大库得手动声明:
// vite.config.js
export default {
build: {
rollupOptions: {
output: {
manualChunks: {
vue: ['vue', 'vue-router', 'pinia'],
echarts: ['echarts'],
},
},
},
},
};
把不常变的库(框架、图表)单独切出去,用户二次访问就能走缓存,不用每次重新下载业务代码。
三、压缩:gzip 还是 brotli
服务器开启了压缩,构建侧也可以先压好。Vite 自带 build.minify(用 esbuild,很快),再上 vite-plugin-compression:
import compress from 'vite-plugin-compression';
export default {
plugins: [compress({ algorithm: 'brotliCompress' })],
};
brotli 一般比 gzip 再小 15%~20%,前提是你的 CDN/Nginx 支持。不支持就老老实实 gzip。
四、用可视化插件看体积大头
凭感觉优化容易白忙活。上 rollup-plugin-visualizer 生成一张treemap,哪个依赖占了多少一眼看清:
import { visualizer } from 'rollup-plugin-visualizer';
export default { plugins: [visualizer({ open: true, gzipSize: true })] };
五、几个值的对比
我一个中型后台项目调前后的变化:
| 项目 | 优化前 | 优化后 | 说明 |
|---|---|---|---|
| 总产物 | 3.8 MB | 1.6 MB | 分包 + brotli |
| 首屏 JS | 1.2 MB | 480 KB | vue/echarts 切出去 |
| build 耗时 | 28 s | 19 s | esbuild 压缩快 |
六、别过度优化
不是所有项目都值得折腾分包。小项目一把梭反而简单。等首屏真的慢了、用户真的 complain 了,再上工具看数据调整。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)