一: cdn引入js库(未验证)
把不经常改变的或第三方的js库放到 index.html
中,通过cdn引入,然后找到 build/webpack.base.conf.js
文件,在 module.exports = { }
中添加以下代码
1 2 3 4 5
| externals: { 'vue':'Vue', 'echarts':'echarts', 'element-ui':'ELEMENT', },
|
二: 路由懒加载
1 2 3 4 5 6
| const routers = [ { path: '/', meta: { title: '首页' }, component: resolve => require([ './views/Home.vue' ], resolve) }, { path: '/login', meta: { title: '登录' }, component: resolve => require([ './views/Login.vue' ], resolve) }, ]
export default routers;
|
然后打包后就会发现,多了很多 1.xxxxx.js;2.xxxxx.js 等等,而 vendor.xxx.js 没了,剩下app.js 和manifest.js,而且app.js还很小
三:取消生成map文件(未验证)
找到 config/index.js
,修改下面 productionSourceMap
为 false,就行了
四:按需引入css和js(未验证)
不常用的 css和js不要在 main.js
里面引入,防止 vendor.js
和 app.css
文件过大
五:各个环境配置
在其他环境的配置文件首行加入 NODE_ENV=production
六: 打包的css和js文件进行压缩
安装插件
1
| npm install --save-dev compression-webpack-plugin
|
注意:各个插件依赖的webpack版本可能不一样会导致项目打包和运行失败
我的环境
1 2 3
| webpack 5.37.0 webpack-cli 4.7.0 webpack-dev-server 3.11.2
|
使用的版本 "compression-webpack-plugin": "^4.0.0"
使用 npm install compression-webpack-plugin@4.0.0 -D
可以降低插件版本
修改配置
修改vue.config.js
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| ... // gzip压缩插件 const CompressionWebpackPlugin = require('compression-webpack-plugin')
module.exports = { lintOnSave: true, devServer: { ... }, chainWebpack: config => { ... }, //以下为关键 configureWebpack: { plugins: [ new CompressionWebpackPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: /\.js$|\.html$|\.css$/, threshold: 4096, minRatio: 0.8, }), ], }, };
|
然后再进行打包时会发现会生成 .gz 后缀的文件,浏览器如果支持g-zip 会自动查找有没有gz文件,如果有的话则加载gz文件然后本地解压,减少了网络带宽的压力,提高加载速度
注意:如果web服务器不支持gzip也无法达到效果
web服务器支持
Nginx支持gzip
在http内添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| http{ gzip on; gzip_static on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; }
|