非响应式

https://juejin.cn/post/6934711893147779109

有些数据是不需要响应式处理的,我们可以让vue不进行数据响应式收集。

1.将数据定义在export default之外

  1. const obj = {
  2. ...
  3. }
  4. export default {
  5. ...
  6. }

模板不能访问

2.定义在$options

  1. export default {
  2. ···
  3. mydata: { // 自定义属性
  4. ....
  5. },
  6. methods: {
  7. doSomething() mydata
  8. return this.$options.mydata
  9. }
  10. }
  11. }

vue生命周期内会调用initData,然后从函数observe开始,顺序找到其中可利用的判断点Object.isExtensible(value)、Object.keys(obj)、property.configurable === false

3.对象不可配置

Object.seal会额外使其所有属性都不可配置且因此不可删除,Object.freeze更会使所有属性都不可更改。

Object.sealObject.freeze都会遍历一次对象的所有属性,性能上比Object.preventExtensions略差。

不过由于是浅层遍历,实践上影响不大,而且对于数组,浏览器实现时做了优化,几乎没有性能损耗。综合看推荐使用Object.preventExtensions和Object.seal。

4.create

实例完成初始化observe后,即created中加入

  1. export default {
  2. data() {
  3. return {}
  4. },
  5. created() {
  6. this.bigData = {
  7. ···
  8. }
  9. }
  10. ···
  11. }

5 .把属性改成不可枚举

  • 设置属性不可枚举
  • 使用Symble类型作为属性名称