项目现状
项目是一个数据监测平台,引入了ehcart和three.js 负责项目的数据可视化;打包后,体积高达2.1M,这个体积相比于我的项目规模来说就显得稍有笨重了
使用webpack-bundle-analyzer分析了一下各个文件所占用的比例:
整个项目文件分布大体清晰了,现在开始优化走起!
优化思路
根据 wba的显示,第三方插件是大部头,包括three.js echart组件
和elementUI组件
。
echarts
根据我的项目需求,echart
主要用到的是linechart
,其他图表不需要。而在开发过程中,我把整个echart都引用进来,其实是很没有必要的。
import echarts from ("echarts")vue.prototype.$echarts = echarts
更改为:
import echarts from "echarts/lib/echarts.js"import "echarts/lib/chart/line"import 'echarts/lib/component/tooltip'import 'echarts/lib/component/title'import 'echarts/lib/component/legend'import 'echarts/lib/component/legendScroll'import "echarts/lib/component/dataZoom"Vue.prototype.$echarts = echarts
elementUI
同理echart,elementUI同样按需求导入,替换之前的整体引入。
elementUI按需引入需要安装 babel-plugin-component包,在babelrc文件中进行如下修改:"plugins": [ ... ["component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" }] ]
优化后:
经过对第三方插件的优化,打包后的文件缩小了近30%。
目前为止,项目打包后的大部头就是three.js
,这个目前的优化空间较小。
路由懒加载
项目初期,我们往往在在首次加载的时候将所有的路由全部加载,导致webpack将所有的模块组件打包在一起,造成vendor文件过大;现在使用路由懒加载,方式如下:
const loadPage = (page) => // vue-loader version 13 import (`@/templates/${page}`).then(m => m.default) const routers =[ { path: '/', redirect:"/index", component:loadPage('console')}]
如果你的vue-loader版本是13.X需要使用上面的引用方法
12版本以下:import (`@/templates/${page}`)
懒加载后,打出来的包整体大小还是1.5M,而vendor.js体积已经比最开始减少一半了。
因为组件分离打包,所以在某一个组件里引用的three这个包也和总包分离了;现在用webpack-bundle-analyzer分析出来的图已经很好看了。
后记
这次的优化比较简单,主要是通过对自己项目的优化,熟悉webpack-bundle-analyzer的操作和使用这个插件的来优化webpack打包文件的方法和思路;算是简单的练手记录一下吧。当然,从整体优化的大维度上来说优化的点还有很多,这个文章继续更新下去。