生产环境
- 平时我们开发时,
npm run dev
的环境是开发环境;而部署到线上时,npm run build
的环境是生产环境,代码会被打包,放到新生成的dist
文件夹下; - 图标资源等会被转为
base64
,当图片小于一定的大小时,图片就会被转为base64
,这个大小可以在webpack配置里设置,在webpack.base.conf.js
下:
//图片压缩
new ImageminPlugin({
disable: process.env.NODE_ENV !== 'production', // Disable during development
pngquant: {
quality: '95-100'
}
}),
但是有个注意点就是用base64
转过的图标会比原来的那个图的大小大30%~40%
(可以将你图片转成的base64
然后保存成文本对比图片的大小)
- 每个
vue
文件中的js
和css
都会被压缩然后单独打包成一个js
, 每次打开一个页面,就会相应的去加载那个js
文件; - 还会生成
app.js
,vendor.js
,manifest.js
每当我们点击一个页面就会去加载一个js
文件(第二次点击读的就是缓存),这个js
文件就是webpack打包的关于这个页面的压缩代码。
- 还会生成一个存放公共样式的
css
文件,在首次打开的时候就加载完毕
配置优化
- 隐藏控制台信息
在webpack.prod.conf.js
文件下补充代码:
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
/*不显示控制台打印信息*/
drop_debugger: true,
drop_console: true,
pure_funcs: ['console.log']
},
sourceMap: false
})
- 隐藏源码:
在config/index.js
下的build
里:productionSourceMap: true
改为productionSourceMap:false
即可。
- 开启gZip压缩
在config/index.js
中:
将false
改为true
即可。
productionGzip: true
当再次npm run build
时会生成.gz
文件:
在控制台的network
可以看到加载的js
文件
优化效果明显,单个js
文件至少能缩小一半以上。
代码优化
代码优化其实要试具体项目而定。
- 路由肯定要按需加载
component: resolve => require(['path/component.name'], resolve)
- 如果组件在多个地方引用到,那么最好是将组件抽成公共组件,在
main.js
中注册全局组件
Vue.component('component-name', componentName)
这样组件可在全局直接引用,不用每次先import
又局部注册。
这样做的目的也是为了缩小js
文件的体积,当你的组件在三个地方用到而你分别引入了三次,打包的时候你的组件代码会被压缩到三个不同的js
文件中,也就是被压缩了三次;如果注册为全局组件,则代码只会被压缩到app.js
中(只被压缩一次)
- 公共的函数和公共的
css
文件也是同样的道理
可以将你的公共样式文件在main.js
中引入,至于公共函数的话,可以挂在到vue
下,全局可调用
Vue.prototype.functionName = functionName
- 图片的大小
图片的大小太大直接影响js
文件的大小,所以压缩图片是很必要的。如果UI
没有帮我们压我们就自己压。http://tinypng.com/
结语
为了缩小项目的体积,几kb
都要争取能减少就减少的。尽量将能抽取的代码抽取,可以看控制台的network
里各个js
文件的大小,并且可以打开看看里面的内容,寻找你的优化点~
这是我项目的优化过程,大都只讲思路,没有涉及很具体,可能还有些缺陷和错误,欢迎批评指教,一起交流学习。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。