vlambda博客
学习文章列表

vue 前端性能监控及优化方案

一、监控系统
1、岳鹰官网:https://yueying.effirst.com/index


2、OpenAPM:https://www.oneapm.com/index.html

二、vue页面首次加载缓慢原因及解决方案
第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅。主要原因是页面在打包后如果不进行相关配置会导致资源文件特别的大,一次想要全部加载完成会特别的耗时。这里简单总结一下自己用到的一些优化的方案。
首先我们可以安装webpack-bundle-analyzer  插件,通过这个插件我们可以在打包的时候看到打包文件的大小,可以明显的看出哪些文件比较大。
解决方案一:
1、去掉编译文件中map文件
在编译好后,我们会看到文件夹下有特别多的.map文件,这些文件主要是帮助我们线上调试代码,查看样式。所以为了避免部署包过大,通常都不生成这些文件。
在  config/index.js  文件中将 productionSourceMap  的值设置为 false . 再次打包就可以看到项目文件中已经没有map文件 (文件大小 35MB-->10.5MB)
2、vue-router 路由懒加载
懒加载即组件的延迟加载,通常vue的页面在运行后进入都会有一个默认的页面,而其他页面只有在点击后才需要加载出来。使用懒加载可以将页面中的资源划分为多份,从而减少第一次加载的时候耗时。
懒加载路由配置:
vue 前端性能监控及优化方案
非懒加载路由配置:
vue 前端性能监控及优化方案
如图所示为通过懒加载后打包的js文件。 而非懒加载的打包后一般只有一个app.js 文件。

解决方案二:使用CDN减小代码体积加快请求速度
1、为什么使用CDN: 使用CDN主要解决两个问题
①、打包时间太长、打包后代码体积太大,请求慢    
②、服务器网络不稳带宽不高,使用cdn可以回避服务器带宽问题

2、具体步骤
①、在 /index.html 中引入CDN
  
    
    
  
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>vue-manage-system</title>         <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"> <script ></script> <script ></script> <script ></script> <link rel="stylesheet" href="https://cdn.bootcss.com/element-ui/2.4.0/theme-chalk/index.css">         <script src="https://cdn.bootcss.com/element-ui/2.4.0/index.js"></script> </head> <body> <div id="app"></div> </body> </html>
注意: 修改配置后还是提示Element未定义,是因为Element依赖Vue,vue.js需要在element-ui之前引入,所以vue.js也要改为cnd的引入方式.

②、修改 /build/webpack.base.conf.js 中修改配置。给 module.exports 添加 externals 属性(详见https://webpack.docschina.org/configuration/externals/),其中键是项目中引用的,值是所引用资源的名字。需要注意的是资源名需要查看所引用的JS源码,查看其中的全局变量是什么,例如element-ui的全局变量就说ELEMENT
 module.exports = { context: path.resolve(__dirname, '../'), entry: { app: './src/main.js' }, externals: { 'vue': 'Vue', 'vue-router': 'VueRouter', 'ElementUI': 'ELEMENT', 'axios': 'axios', } }
③、删除原先的import

如果不删除原先的import,项目还是会从node_modules中引入资源。也就是说不删的话,npm run build时候仍会将引用的资源一起打包,生成文件会大不少。所以我认为还是删了好。

如图:

  
原文:https://www.cnblogs.com/zyulike/p/11190012.html
作者: 橘子味儿的猫



解决方案三: 页面加载缓慢原因分析
参考文章:https://www.jianshu.com/p/24b93b13e5a9


三、 vue & nginx  配置Gzip压缩  &&  项目缓存 
1、Vue 配置Gzip
// 安装 compression-webpack-pluginnpm install --save-dev compression-webpack-plugin@1.1.12 
2、vue.config.js 配置Gzip压缩
// 导入compression-webpack-pluginconst CompressionWebpackPlugin = require('compression-webpack-plugin')// 定义压缩文件类型const productionGzipExtensions = ['js', 'css']
module.exports = { // 配置反向代理 devServer: { proxy: { '/api': { target: 'http://172.31.120.61:8080/', // target: 'http://172.31.120.158:8080/', ws: true, changeOrigin: true, pathRewrite: { '^/api': '' } } } }, configureWebpack: { plugins: [ new CompressionWebpackPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), threshold: 10240, minRatio: 0.8 }) ] }}

3、nginx 配制Gzip

# 开启gzipgzip on;# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩gzip_min_length 1k;# 设置压缩所需要的缓冲区大小gzip_buffers 16 64k;# 设置gzip压缩针对的HTTP协议版本gzip_http_version 1.1;# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间gzip_comp_level 3;gzip_types text/plain application/x-javascript application/javascript text/javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png;# 是否在http header中添加Vary: Accept-Encoding,建议开启       gzip_vary on;
4、将上面的 配制 添加到 server 上面 重启 nginx
nginx -s reload


5、解决 配置后 npm run build 报错

 报错信息

npm run  build > [email protected] build /home/lvph/work/XXXX> vue-cli-service build
sh: XXXX/node_modules/.bin/vue-cli-service: Permission deniednpm ERR! code ELIFECYCLEnpm ERR! errno 126npm ERR! [email protected] build: `vue-cli-service build`npm ERR! Exit status 126npm ERR!npm ERR! Failed at the [email protected] build script.npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:npm ERR! /home/lvph/.npm/_logs/2020-01-19T01_33_20_803Z-debug.log

    解决办法

到项目路径下rm -rf node_modulesrm package-lock.jsonnpm cache clear --force在执行npm install

参考文档:
h ttps:/ /www.cnblogs.com/changyaoself/p/12801166.html

https://www.cnblogs.com/Renyi-Fan/p/11047490.html

https://www.jianshu.com/p/1c5f80f45767

https://www.yuque.com/wangjingfan/uca8pl/mwohyt#8jEvf  //特别详细