1、v-for和v-if不要在同一级应用,v-for比v-if的优先级高 会先执行循环,同时应用了会每次循环都执行一次v-if,
2、vue 中应用的js资源 尽量的应用cdn形式在加载,以此缩小打包之后的体积
例:

externals: {  jquery: 'jQuery'}//[webpack内部扩大性能](https://www.webpackjs.com/configuration/externals/)

3、路由器的按需加载

//ES6形式加载{    path:'/denglu', //登录    name:'denglu',    component:()=>import('../components/denglu'),    meta:{ //菜单      title:'登录'    }}//webpack 引入形式{    path:'/denglu', //登录    name:'denglu',    component:resolve=>(require(['../components/denglu'],resolve)),    meta:{ //菜单      title:'登录'    }}

4、组件的按需引入,例如element ui ant Design等框架提供的都有按需引入 ,须要哪些性能引入哪些组件。
例:element UI

import Vue from 'vue';import { Button, Select } from 'element-ui';import App from './App.vue';Vue.component(Button.name, Button);Vue.component(Select.name, Select);/* 或写为 * Vue.use(Button) * Vue.use(Select) */new Vue({  el: '#app',  render: h => h(App)});

5、图标和图片的合理性优化

1.小图标应用 SVG2.通过 base64 和 webp  的形式加载小型图片3.大图片尽量应用CND的形式加载4.图片的懒加载,大部分ui框架都带有图片懒加载的,没有能够应用v-lazy

6、勾销console打印

module.exports = {    configureWebpack: config => {        // 勾销console打印            config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true    }}

7、gzip压缩

const productionGzipExtensions = ['js', 'css'];module.exports = {    productionSourceMap: false, //不显示map 源码    //gzip 压缩    configureWebpack: config => {      if (process.env.NODE_ENV === 'production') {        config.plugins.push(new TerserPlugin())        config.plugins.push(new CompressionWebpackPlugin({          algorithm: 'gzip',          test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),          threshold: 10240,          minRatio: 0.8        }))      }      // 勾销console打印          config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true    },}

服务器 nginx 也须要部署gzip代码如下

server{     gzip  on;    gzip_static on;    gzip_buffers 4 16k;    gzip_comp_level 8;    gzip_types application/javascript text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #  压缩文件类型     gzip_vary on;}

8、生成剖析包 查看打包之后的占比,进行剖析,(以上的内容曾经进行优化和压缩)查看是否屡次引入
vue.config.js

    chainWebpack:config =>{        // 删除预加载 真正的按需加载        config.plugins.delete('prefetch');        /* 增加剖析工具*/        if (process.env.NODE_ENV === 'production') {          if (process.env.npm_config_report) {              config                  .plugin('webpack-bundle-analyzer')                  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)                  .end();              config.plugins.delete('prefetch')          }        }    }

或者
package.json 在build中增加 --report

"scripts": {    "serve": "vue-cli-service serve",    "build": "vue-cli-service build --report",    "lint": "vue-cli-service lint"  },

执行命令后会在dist中生成一个report.html 文件 关上文件就是剖析图表


1、keep-alive页面缓存 keep-alive 会缓存以后页面的数据,防止反复调用接口 反复渲染占用性能

<keep-alive :include="tagsList">   <router-view :key="$route.fullPath"></router-view></keep-alive>