vue项目性能优化之——Object.freeze()

如果你有一个巨大的数组或Object,并且确信数据不会修改,通过 Object.freeze 方法来冻结一个对象,可以让性能大幅提升。

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

在vue中的data或者vuex里使用Object.freeze(), 这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。 官网链接

例如冻结一个Object:

  <div id="app">
    <p>{{ freezeObject.name }}</p>
    <!-- 这里的 `freezeObject.name` 不会更新,会抛出 TypeError -->
    <button v-on:click="change">Change it</button>
  </div>
  
  data() {
    return {
      freezeObject: Object.freeze({
        name: '小红'
      })
    }
  },
  methods: {
  change(){
     this.freezeObject.name = '小明';
  }
}

如果直接更改freezeObject的引用,数据会更改,视图会更新:

 change(){
    let freezeTest = {
        name: '小白'
      }
      this.freezeObject = freezeTest;
   }

冻结数组:

  <div id="app">
    <p>{{ freezeArr[0] }}</p>
    <!-- 这里的 `freezeArr[0]` 不会更新会抛出 TypeError -->
    <button v-on:click="change">Change it</button>
  </div>
    data() {
    return {
      freezeArr: Object.freeze([1])
      }
    },
   methods: {
     change(){
        this.freezeArr[0] = 2;
        //或者
         this.freezeArr.push(2);
    }
}
    

注意:这里冻结的是数组,如果冻结的是数组对象,就不管用了

Object.isFrozen(obj); //返回Boolean值, 查看是否被冻结

在ES5中,如果这个方法的参数不是一个对象(一个原始值),那么它会导致 TypeError。在ES2015中,非对象参数将被视为要被冻结的普通对象,并被简单地返回。

> Object.freeze(1)
TypeError: 1 is not an object // ES5 code

> Object.freeze(1)
1 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lancnn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值