优化 Jenkins 构建 Vue 项目时间
背景
前后端全部自动化部署后,构建速度就变成运维小伙伴日常吐槽的点,上个月优化了后端镜像脚本,将构建时间缩短到 7s 以内,接下来就轮到你了,小前端
找问题
前端的构建脚本其实很简单,先把大象从冰箱里拿出来
- Clone: 拉取代码
git clone
- Install: 安装依赖
npm install
- Build: 构建
npm run build
- Upload: 上传
dist
到云端服务器
为了方面查看每一步的执行耗时,我使用了time
命令(粗略统计),在执行命令前添加time
即可,举个 🌰
time npm install
然后构建项目,没有任何处理的总构建时间是 1 分 43 秒

install
18.472s

build
41.27s

upload
26.787s

因为代码拉取直接使用的 Jenkins,用总时长减去上面三项剩下就是clone
的耗时 —— 16.47s(其实中间还有其他耗时啦,但咱就不分这么细了)
逐个击破
Clone
git clone
命令会拉取所有历史版本的代码,对于像这种指定版本的构建来说并不需要这些历史,随着迭代代码量越来越多,拉取代码的时间也就会越来越久。
所以第一步,修改拉取配置,改为浅克隆,克隆深度为 1

设置步骤如下:
源码管理 - Additional Behaviours
- Advanced clone behaviours
(高级克隆) - Shallow clone
(浅克隆)

修改后总构建时间缩短 7s 👏🏻
Install
改用 yarn 做依赖管理
# 安装 yarn
npm install -g yarn
使用缓存
# 配置 yarn 的缓存路径和全局安装路径,注意将路径改成自己的目录
yarn config set cache-folder /data/jenkins/yarn/cache
yarn config set global-folder /data/jenkins/yarn/global
# 优先使用缓存数据
yarn --prefer-offline
# 清理缓存命令
# npm cache clean --force
yarn cache clean
--prefer-offline
则优先使用缓存数据,如果没有匹配的缓存数据,则从远程仓库下载。--prefer-online
则优先使用网络数据,忽略缓存数据,这种模式可以及时获取最新的模块。
屏蔽非必要打印
当设置 progress 为 true 时, 时将会显示进度条,把它设置为 false 可小幅提高 的速度
# npm set progress=false && npm run build
yarn build --no-progress

install
时间从 18s 缩短到 10s

总构建时间缩短 8s 👏🏻
如果想依旧使用 npm, 可以使用
npm ci
命令优化速度,但要注意 node 版本需要 10 以上,且 package.json 和 package-lock.json 的版本号要一致,第 35 次的构建失败就是用了低版本构建
最终优化 - node_modules 复用
其实完全可以将 node_modules
复用,因为依赖库并不是经常更新,完全可以需要时再选择性更新,这样的话 install
的时间可以全部节省出来,但具体怎么实现还没想好 🤔
Build
检查项目依赖
- 项目里不再使用依赖不删等着过年?
- 明确依赖使用的环境,开发依赖不要放到生产里,比如各种 css 预编译
关闭 SourceMap
// config/index.js
/**
* Source Maps
*/
productionSourceMap: false,
// https://webpack.js.org/configuration/devtool/#production
devtool: 'eval',
关闭调试
// src/main.js
const isDebug = process.env.NODE_ENV !== 'production'
Vue.config.debug = isDebug
Vue.config.devtools = isDebug
Vue.config.productionTip = isDebug
提取不常变动的第三方库
使用 webpack 的插件 DllReferencePlugin
Upload
图片压缩
该压缩压缩,该雪碧图雪碧图,你的一小步,我的一大步
代码检查
在本地构建后发现多数大文件都是本地测试功能使用的,生产根本不用 🤦🏻♀️
同样的 js 依赖,没有提成公共文件,每个功能文件夹下都有一份 🤦🏻♀️
还有一些奇葩处理,我就不说了,哎,论走查的重要性 🤦🏻♀️

修改后 upload
时间从 26s 缩短到 9s,总构建时间缩短 17s 👏🏻
优化结果
步骤 | 优化前 | 优化后 |
---|---|---|
Clone | 16.74s | 9s |
Install | 18.47s | 10.26s |
Build | 41.27s | 32.55s |
Upload | 26.79s | 9.64s |
Total | 103.27s | 61.45s |
优化了近 40% 👏🏻,当然还有继续优化的空间~~~,我们下次再见 👋
PREV
初试 Electron 远程调试
NEXT