近期做了一个小项目,前端是通过 Laravel Mix 编译的,产生的 app.js ,大小有 3M 还多,不得不优化一下……
没做任何优化之前:
查看应用的前端库结构
安装
npm install --save-dev webpack-bundle-analyzer
。修改 webpack.mix.js 配置 。
1
2
3
4
5
6
7const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
mix.webpackConfig({
plugins: [
new BundleAnalyzerPlugin(),
]
});运行
npm run dev
或者npm run production
,浏览器中自动打开http://127.0.0.1:8888/
页面。鼠标悬浮可以显示包大小
分离内存较大的库
这些库会被 webpack 一起打包成一个 app.js,所以减小应用体积的最有效方法就是将这些库分离出去,别将它们与我们自己写的应用代码打包到一起。大部分有名的第三方库在公共CDN都有存放,如 bootcss, unpkg 等,速度飞快,可以直接引用。
配置 webpack.mix.js :
1
2
3
4
5
6
7
8
9
10
11mix.webpackConfig({
plugins: [
new BundleAnalyzerPlugin(),
],
externals: {
'element-ui': 'Element',
'vue': 'Vue',
'lodash': '_',
}
}).js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css');resources/views/layouts/app.blade.php
文件中加入element-ui
、vue
、lodash
的外链1
2
3
4<link href="https://cdn.bootcss.com/element-ui/2.0.11/theme-chalk/index.css" rel="stylesheet">
<script src="//cdn.bootcss.com/vue/2.5.13/vue.min.js"></script>
<script src="//cdn.bootcss.com/element-ui/2.0.11/index.js"></script>
<script src="//cdn.bootcss.com/lodash.js/4.17.4/lodash.min.js"></script>resources/js/app.js
和resources/js/bootstrap.js
文件中将require('vue')
、require('lodash')
、import ElementUI from 'element-ui'
的位置删除,否则编译时会报错。运行
npm run dev
运行
npm run production
优化浏览器加载时的大小
在这里要做的就是开启 Nginx 的 gzip
压缩 。
- 没开启时:
- 开启
gzip
压缩后
nginx.conf 中配置:
1 | #gzip on; |