分析问题
在进行优化的前提下,首先要做得是对整个框架进行分析,看看具体哪个模块以及那个插件打包体积过大,针对性的进行优化,在这里我们通过 webpack-bundle-analyzer
进行分析
步骤1:
1 | npm install --save-dev webpack-bundle-analyzer //安装插件 |
步骤2:
1 | //在`build/webpack.prod.config.js`中的`module.exports = webpackConfig`这句话的上面增加 |
步骤3:
1 | npm run build --report |
结果:
通过结果我们不难发现,体积过大的文件有一下几个:
- element-ui
- vue
- echarts
- xlsx
- tinymce
- vCharts
优化问题
优化主要目的有:
- 加快资源加载速度,减少用户等待的时间和首页白屏时间,提高用户体验。
- 加快打包速度,不要将时间浪费在等待打包上。
更换CDN:
解决第一个问题,很多人都会想到资源文件放在 CDN 上就好了,没错,这次我们就是通过 CDN 来解决加载问题。
在 index.html
中引入 vue, element-ui tinymce echarts。
1 |
|
因为依赖是从外部引入的,所以需要告知 webpack 在打包时,依赖的来源。
修改 webpack.base.conf.js
在最后一行加上一下代码:
1 | externals: { |
删除所有引入/导入Vcharts , echarts, tinymce 的地方
再次 npm run build –report
发现其打包文件体积比之前足足少了2MB,在实际开发过程中,可能会使用到其他的插件,我们可以根据插件来更换其CDN从而减少其打包体积大小,这样页面在加载的时候也会更快
服务器端开启 gzip
使用 gzip 可以进一步压缩文件,使得服务器传递给浏览器的文件是经由压缩之后的,待浏览器收到之后再解压缩。要使用这一方式,需要服务器端的支持,这里以 Nginx 为例。
在 nginx.conf
中,添加如下配置:
1 | gzip on; |
之后刷新页面( 注意禁用缓存 ),观察 js、css 等资源文件的请求中是否包含 Content-Encoding: gzip
,如果存在,则表明 gzip 已成功。
注意,在 gzip_types
中规定了哪些请求类型会使用 gzip 进行压缩。对于没有使用 gzip 的资源文件,可将其 Content-type
类型加入 gzip_types
之中。