vue前端代码优化

也许有人会感觉CR没有什么卵用,只要我代码实现了功能,我完成了开发任务,我就OK了,为啥还要CR??   但是CR真的是有必要的,你不仅可以发现自己代码中的不足之处,待优化点,简洁明了的代码易读别人接手也会很快。

1. 比如在vue项目中只有某一个组件用某一个特别长的常量对象,如果你只是把常量直接放在该组件下的data中,不仅代码不易读,而且会被watch,影响性能,因为常量是不变的,不用被watch。这个时候Object.freeze()就起作用了,估计很多人都没用过这个特性,先来了解一下:

Object.freeze()是ES5新增的特性,可以冻结一个对象,防止对象被修改。 如果你有一个巨大的数组或Object,并且确信数据不会修改,使用Object.freeze()可以让性能大幅提升。对于纯展示的大数据,可以使用Object.freeze提升性能。

  • 优化代码前:可读性差;直接放到data中,会被watch,实际上并不需要被watch
<script>
export default {
  data() {
    tableData: {
      test1: '测试测试1测试1测试1测试1测试1测试11',
      test2: '测试测试2测试2测试2测试2测试2测试22',
      test3: '测试测试3测试3测试3测试3测试3测试33',
      test4: '测试测试4测试4测试4测试4测试4测试44',
      test5: '测试测试5测试5测试5测试5测试5测试55',
      test6: '测试测试6测试6测试6测试6测试6测试66',
      test7: '测试测试7测试7测试7测试7测试7测试77',
      test8: '测试测试8测试8测试8测试8测试8测试88',
      test9: '测试测试9测试9测试9测试9测试9测试99',
      test10: '测试测试10测试10测试10测试10测试10测试1010'
    }
  }
}
</script>
  • 优化代码后:vue不会对tableData里的object做getter、setter绑定,提升性能
<script>
// 如果是多个文件都用到这个,放在constant.js文件中
const TABLEDATA = {
  test1: '测试测试1测试1测试1测试1测试1测试11',
  test2: '测试测试2测试2测试2测试2测试2测试22',
  test3: '测试测试3测试3测试3测试3测试3测试33',
  test4: '测试测试4测试4测试4测试4测试4测试44',
  test5: '测试测试5测试5测试5测试5测试5测试55',
  test6: '测试测试6测试6测试6测试6测试6测试66',
  test7: '测试测试7测试7测试7测试7测试7测试77',
  test8: '测试测试8测试8测试8测试8测试8测试88',
  test9: '测试测试9测试9测试9测试9测试9测试99',
  test10: '测试测试10测试10测试10测试10测试10测试1010'
};

export default {
  data() {
    tableData: Object.freeze(TABLEDATA)
  }
}
</script>

2. 想知道某一个对象数组中是否有符合要求的属性值,some()方法了解一下。

some() 方法用于检测数组中的元素是否满足指定条件

想知道对象数组中的是否有属性isEdit为true的数据

  • 优化代码前:
export default {
  methods() {
    validateTable(arr) {
        let flag = false;
        if (arr.filter(item => item.isEdit).length) {
            flag = true;
        }
        return flag;
    }
  }
}
  • 优化代码后:代码简洁明了
export default {
  methods() {
    validateTable(arr) {
      return arr.some(item => item.isEdit);
    }
  }
}

3. 有时候需要连续初始化vuex好几个平级的属性值,可能某一个方法要调用好几次,代码虽然容易理解,这个时候如果通过配置数据遍历传参更新相应数据会更好,简洁易读,便于之后的代码维护

  • 优化代码前:
export default {
  methods() {
    ...mapAtions([
      'updateState'
    ]),
    initState() {
      this.updateState('state1', false);
      this.updateState('state2', false);
      this.updateState('state3', false);
    },

    checkState(state) {
      if (state === 'state1') {
        this.updateState('state1', true);
      } else if (state === 'state2') {
        this.updateState('state2', true);
      } else if (state === 'state3') {
        this.updateState('state3', true);
      }
    }
  }
}
  • 优化代码后:通过配置数据遍历处理数据是不是更加简洁明了了
const STATE_MAPPING = {
  state1: 'state1',
  state2: 'state2',
  state3: 'state3'
};

export default {
  methods() {
    ...mapAtions([
      'updateState'
    ]),
    initState() {
      Object.keys(STATE_MAPPING).forEach(key => this.updateState(STATE_MAPPING[key], false));
    },
    checkState(state) {
      this.updateState(STATE_MAPPING[state], true);
    }
  }
}

优化后的代码是不是很简洁明了,通过CR你会发现自己代码的不足之处,也会在CR的过程中了解到一种需求的不同解决办法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值