【经验与坑】Vue项目性能优化——Gzip
这是前端项目写完后的状况,首页加载速度简直慢到怀疑人生。
那么借助这个机会来学习一下,前端项目 准确的说是Vue项目该如何优化呢?
根据查阅网络资料,大致分为五个部分优化项目。
在项目根目录下添加 vue.config.js 文件,并关闭 productionSourceMap,在配置文件下写入如下内容:
module.exports = {
productionSourceMap: false
}
(1)开启Gzip压缩
注意:前端配置了Gzip插件,服务器的nginx也必须开启Gzip才能生效。
首先下载安装插件。
npm install --save-dev compression-webpack-plugin
继续在vue.config.js 文件中添加配置信息。
//是否为生产环境
const isProduction = process.env.NODE_ENV !== 'development';
//gzip压缩
const CompressionWebpackPlugin = require('compression-webpack-plugin')
module.exports = {
productionSourceMap: false,
configureWebpack: config =>{
//生产环境配置
if (isProduction){
//gzip压缩
const productionGzipExtentions = ['html','js','css']
config.plugins.push(
new CompressionWebpackPlugin({
filename:'[path].gz[query]',
algorithm:'gzip',
test: new RegExp(
'\\.(' + productionGzipExtensions.join('|') + ')$'
),
threshold: 10240, // 只有大小大于该值的资源会被处理 10240
minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
deleteOriginalAssets: false // 删除原文件
})
)
}
}
}
打开 nginx 文件夹下的 nginx.conf 文件,在 http 模块中写入以下内容:
#开启Gzip
gzip on;
#设置gzip压缩的最小文件,小鱼设置值的文件不会被压缩
gzip_min_length 1k;
# gzip 压缩级别 1-9 数字越大压缩越好,但是也越占用cpu时间
gzip_comp_level 2;
#进行压缩的文件类型
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 16k;
结束后在前端的项目根目录下写入命令:
npm run build --report
可以看到压缩效果是相当明显的。
(2)使用插件去除 console warning debugger等没啥用的东西
npm install uglifyjs-webpack-plugin --save-dev
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production';
configureWebpack: config => {
const plugins = [];
if (isProduction) {
plugins.push(
new UglifyJsPlugin({
uglifyOptions: {
output: {
comments: false, // 去掉注释
},
warnings: false,
compress: {
drop_console: true,
drop_debugger: false,
pure_funcs: ['console.log']//移除console
}
}
})
)
}
},
这一步其实可以忽略,经过实验打包后的体积也就能减少 10-30kb左右,加载速度也没基本没什么提升。
(3)【选配】部分插件启用CDN加速
虽然CDN很快,但是并没有本地打包的稳定。
将使用的插件使用cdn 链接,并且配置 webpack 将使用 CDN 的插件不进行打包,当然还要在 index.html 中引入js以及css