vue之代码优化

vue之代码优化

  1. 组件名称的优化
  • 标签名,文件名, 组件名称统一。
<template>
    <su-pager />  
</template>
<script>
import suPager from './suPage.vue'
export default {
    components:{
        suPager
    }
}
  1. 数据存储优化。
    store存放经常变更的变量。

  2. vue页面数据优化

  • data内的数据越少越好, 优点: 性能提升, 代码简洁。

  • 多个同组的字段, 可用对象形式包裹, 例如form内的字段; 优点: 便于扩展内容;

  1. 链式调用优化-分行
// 不建议
queryUserList() {
  this.axios.get('/queryUserList', this.queryOption).then(res => {
    }).catch(err => {
    }
  )
}

// 建议
queryUserList() {
  this.axios
    .get('/queryUserList', this.queryOption)
    .then(res => {
    })
    .catch(err => {
    }
  )
}

  1. 三元优化
  • 实例一*

 // 不建议
 let data = this.radio5 == 1 ? this.diagram.outAmountList : this.radio5 == 2 ? this.diagram.orderTonnageList : this.diagram.orderAmountList 
 

 // 优秀
 let index = this.radio5 - 1,
 data = [this.diagram.outAmountList, this.diagram.orderTonnageList , this.diagram.orderAmountList][index]
 
  • 实例二*

 // 不推荐
 let userName = localStorage.userName ? localStorage.userName : 'admin'
 
 // 推荐
 let userName = localStorage.userName || 'admin'
  1. 优化判断
  • 多重判断,永远将特殊情况放在最前面
  // 不推荐
  if (res.code == 200) {
      
    localStorage.setItem('Variable1', JSON.stringify(res.data.Variable1))
    localStorage.setItem('Variable2', res.data.Variable2)
    localStorage.setItem('Variable3', res.data.Variable3)
    localStorage.setItem('Variable4', res.data.Variable4)
    localStorage.setItem('Variable5', res.data.Variable5)

    console.log('登录成功')
  } else {
    if (res.code == 511) {
        console.log('审核中, 请稍候!')
    } else if (res.code == 512) {
        console.log('审核成功, 欢迎登录!')
    } else if (res.code == 513) {
        console.log('审核失败, 请重试!')
    } else if (res.code == 514) {
        console.log('您的账号已被停用!')
    }
  }

  // 推荐

  if (res.code == 511) return console.log('审核中, 请稍候!')
  if (res.code == 512) return console.log('审核成功, 欢迎登录!')
  if (res.code == 513) return console.log('审核失败, 请重试!')
  if (res.code == 514) return console.log('您的账号已被停用!')
  
    localStorage.setItem('Variable1', JSON.stringify(res.data.Variable1))
    localStorage.setItem('Variable2', res.data.Variable2)
    localStorage.setItem('Variable3', res.data.Variable3)
    localStorage.setItem('Variable4', res.data.Variable4)
    localStorage.setItem('Variable5', res.data.Variable5)

  console.log('登录成功')
  • 多重if-else与对象判断法
    第一种是常见的判断方法,
    第二种采用swtich;
    第三种采用对象法,判断color是否在对象内,如果在则运行这个值;

//method1
     if (color) {
         if (color === 'black') {
             printBlackBackground();
         } else if (color === 'red') {
             printRedBackground();
         } else if (color === 'blue') {
             printBlueBackground();
         } else if (color === 'green') {
             printGreenBackground();
         } else {
             printYellowBackground();
         }
     }
     
 //method2
     switch(color) {
         case 'black':
             printBlackBackground();
             break;
         case 'red':
             printRedBackground();
             break;
         case 'blue':
             printBlueBackground();
             break;
         case 'green':
             printGreenBackground();
             break;
         default:
             printYellowBackground();
     }
  
 //method3
     var colorObj = {
         'black': printBlackBackground,
         'red': printRedBackground,
         'blue': printBlueBackground,
         'green': printGreenBackground,
         'yellow': printYellowBackground
     };
     if (color in colorObj) {
       colorObj[color]();
     }

还可以用es6来写哦

let currentTab = 'a';
const comparativeTotles = new Map([
    ['a', () => { console.log("a") }],
    ['b', () => { console.log("b") }],
    ['c', () => { console.log("c") }],
    ['d', () => { console.log("d") }]
 ])
if (comparativeTotles.has(currentTab)) {
  comparativeTotles.get(currentTab);
}

  1. 更新store的通用方法
const store = new Vuex.Store({
  state: {
    spread: false
  },
  mutations: {
    updataStore(state, option) {
      for (let k in option) {
        state[k] = option[k]
      }
    }
  }
})
 // 调用,第二个参数中传所有你要更新的store对象即可
 this.$store.commit(
  'updataStore',
     {
        userInfo: {
          companyId: res.data.companyId,
          companyName: res.data.companyName,
          userId: res.data.userId,
        },
        permissions: res.data.permissions
    }
 )
  1. indexOf的优化

正常我们可能会使用这种方式

var someText = 'javascript rules';
 if (someText.indexOf('javascript') !== -1) {
 }

 // or
 if (someText.indexOf('javascript') >= 0) {
  }

这里有更好的方式实现
利用按位取反运算符 (~)运算符,取得负数, 然后使用!!获取boolean值;

  var someText = 'text';
  !!~someText.indexOf('tex'); // someText contains "tex" - true
  !~someText.indexOf('tex'); // someText NOT contains "tex" - false
   ~someText.indexOf('asd'); // someText doesn't contain "asd" - false
  ~someText.indexOf('ext'); // someText contains "ext" - true
  1. 带数字的字符串拼接

明显是第一种看起来更加优雅;

 var one = 1;
 var two = 2;
   var three = '3';
//method 1
  var result = ''.concat(one, two, three); //"123"

//method 2
var result = one + two + three; //"33" instead of "123"

//method 3
var result ='' + one + two + three; //"123"

10 vue的链式调用

methods: {
  setName(name) {
    this.name = name;
    return   this;
  },
  setSex (sex) {
    this.sex = sex;
    return this;
  },
    init () {
      this.setName("张三").setSex ("16")
    }
}

  1. 转换数字
var one = '1';
var numberOne = +one; // Number 1

12、保持函数功能的单一性-函数式编程

Bad:

function emailClients(clients) {
  clients.forEach((client) => {
    const clientRecord = database.lookup(client)
    if (clientRecord.isActive()) {
      email(client)
    }
  })
}

Good:

function emailActiveClients(clients, isActiveClient, email) {
  clients
    .filter(isActiveClient)
    .forEach(email)
}

function isActiveClient(client) {
  const clientRecord = database.lookup(client)
  return clientRecord.isActive()
}
  1. 尾调用

f调用后,存在变量m ,n的记录, 但是当g调用完后, 则可以删除f的调用记录, 只保留g调用记录; 这叫做'尾调用优化', 即只保留内层函数的调用记录。
如果所有函数都是尾调用,那么完全可以做到每次执行时,调用记录只有一项,这将大大节省内存。这就是"尾调用优化"的意义。

function f() {
  let m = 1;
  let n = 2;
  return g(m + n);
}
f();
  1. 纯函数和非纯函数:

纯函数可以做到自给自足,对测试友好、没有外部依赖,既不受外部环境影响,也不会影响外部环境。

// 纯函数
function add(a) {
  var b = 0;
  return a + b;
}

// 非纯函数,依赖外部变量
var b = 0;
function add(a) {
  return a + b;
}

// 非纯函数,依赖系统时间
function now() {
  return new Date();
}

// 非纯函数,依赖随机数
function random(){
  return Math.random();
}

//非纯函数,设置外部 cookie
function setCookie(){
  document.cookie = "name=Porco";
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • VUE Vue :数据驱动的M V Vm框架 m :model(后台提供数据),v :view(页面),vM(模板...
    wudongyu阅读 5,603评论 0 11
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 10,080评论 1 52
  • 一. Java基础部分.................................................
    wy_sure阅读 4,104评论 0 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,817评论 1 32

友情链接更多精彩内容