GZIP压缩
GZIP压缩有动态跟静态两种
可以将由前端打包GZIP,通过 gzip_static:on会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
nginx
gzip on|off;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript ;
gzip_static on|off
gzip_vary on;
gzip_buffers 2 4k;
gzip_http_version 1.1;
vue.config.js
const CompressionPlugin = require('compression-webpack-plugin')
configureWebpack: {
plugins: [
new CompressionPlugin({
algorithm: 'gzip',
test: /\.js$|\.html$|\.css$/,
filename: '[path].gz[query]',
minRatio: 1,
threshold: 10240,
deleteOriginalAssets: false,
}),
]
}
CDN
const isProd = process.env.NODE_ENV === 'production'
const cdn = {
externals: {
vue: 'Vue',
'vue-router': 'VueRouter',
vuex: 'Vuex',
axios: 'axios',
'ant-design-vue': 'antd',
'vue-ls': 'VueStorage',
},
css: [],
js: [
'//unpkg.com/vue@2.6.12/dist/vue.min.js',
'//unpkg.com/vue-router@3.4.9/dist/vue-router.min.js',
'//unpkg.com/vuex@3.5.1/dist/vuex.min.js',
'//unpkg.com/axios@0.21.0/dist/axios.min.js',
'//unpkg.com/ant-design-vue@1.7.2/dist/antd.min.js',
'//unpkg.com/vue-ls@3.2.1/dist/vue-ls.min.js',
]
};
configureWebpack: config => {
config.externals = isProd ? cdn.externals : {}
},
chainWebpack: config => {
config.plugin('html').tap(args => {
args[0].cdn = cdn
return args
})
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<link rel="stylesheet" href="//at.alicdn.com/t/font_1825329_krt0759dhsh.css" />
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
<link rel="stylesheet" href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" />
<% } %>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
<script type="text/javascript" src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
<% } %>
</body>
</html>
路由按需加载
使用 ()=>import('xxx')按需加载路由组件,可以添加magic comments
打包后会单独生成chunk.[hash].js文件,进一步减小主包大小
{
path: '/login',
name: 'login',
component: () => import('@/views/login/Login'),
hidden: true,
},
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!