导致加载慢的原因:
解决方案:
webpack-bundle-analyzer是webpack的插件,需要配合webpack和webpack-cli一起使用。这个插件可以读取打包后各个插件和文件的大小,并可视化展现,生成代码分析报告,可以直观地分析打包出的文件有哪些,及它们的大小、占比情况等,对应做出优化,从而帮助提升代码质量和网站性能。
安装:
npm install webpack-bundle-analyzer --save-dev
webpack.config.js中配置:
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin()
]
}
package.json的scripts中配置:
"analyz": "NODE_ENV=production npm_config_report=true npm run build"
运行查看报告:
npm run analyz
把无用的插件进行删除,对引用多次的文件进行优化等等
1)代码层面的优化
(2)Webpack 层面的优化
(3)基础的 Web 技术的优化
️vue-cli 3.0 模式就使用了Babel,我们需要添加 syntax-dynamic-import 插件,才能使 Babel 可以正确地解析语法。
// 安装插件 syntax-dynamic-import
cnpm install --save-dev @babel/plugin-syntax-dynamic-import
// 修改babel.config.js
module.exports = {
"presets": [
"@vue/app"
],
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
},
"syntax-dynamic-import"
]
]
}
// 修改路由组件的加载(router/index.js)
{
path: '/',
name: 'home',
component: resolve => require(['pages/Home'], resolve)
}
webpack3 使用 CommonsChunkPlugin,在webpack的config文件中,配置minChunks,
假如minChunks为3。表示会把使用3次及以上的包抽离出来,放进公共依赖文件,避免了重复加载组件。
webpack4中使用splitChunkPlugin处理组件避免重复打包问题,和打包后的js文件过大问题。(CommonsChunkPlugin
曾被用来避免他们之间的重复依赖,但是不可能再做进一步的优化)
具体介绍及配置,请参考我的另一篇博客:
webpack的优化之SplitChunksPlugin_姜无忧的博客-CSDN博客最初,chunks(以及内部导入的模块)是通过内部 webpack 图谱中的父子关系关联的。CommonsChunkPlugin曾被用来避免他们之间的重复依赖,但是不可能再做进一步的优化。从 webpack v4 开始,移除了CommonsChunkPlugin,取而代之的是optimization.splitChunks。optimization.splitChunks下面这个配置对象代表SplitChunksPlugin的默认行为。webpack.config.jsmod...https://blog.csdn.net/xiasohuai/article/details/123297284
我们可以把那些不太可能改动的代码或者库分离出来,继续减小单个chunk-vendors
,然后通过CDN加载进行加速加载资源。
// 修改vue.config.js 分离不常用代码库
module.exports = {
configureWebpack: config => {
if (isProduction) {
config.externals = {
vue: 'Vue',
'vue-router': 'VueRouter',
vuex: 'Vuex',
axios: 'axios'
}
}
}
}
// 在public文件夹的index.html 加载
// 安装uglifyjs-webpack-plugin
cnpm install uglifyjs-webpack-plugin --save-dev
// 修改vue.config.js
configureWebpack: config => {
if (isProduction) {
.....
config.plugins.push(
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false,
drop_debugger: true,
drop_console: true,
},
},
sourceMap: false,
parallel: true,
})
)
}
}
1.在nginx中开启gzip
server {
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css text/xml application/json;
gzip_vary on;
listen 80;
listen [::]:80 ;
。。。。。。。。
请求js/css文件
配置后的样子: