非响应式
有些数据是不需要响应式处理的,我们可以让vue不进行数据响应式收集。
1.将数据定义在export default之外
const obj = {
...
}
export default {
...
}
2.定义在$options
export default {
···
mydata: { // 自定义属性
....
},
methods: {
doSomething() mydata
return this.$options.mydata
}
}
}
vue生命周期内会调用initData,然后从函数observe开始,顺序找到其中可利用的判断点Object.isExtensible(value)、Object.keys(obj)、property.configurable === false
3.对象不可配置
Object.seal
会额外使其所有属性都不可配置且因此不可删除,Object.freeze
更会使所有属性都不可更改。
Object.seal
和Object.freeze
都会遍历一次对象的所有属性,性能上比Object.preventExtensions
略差。
不过由于是浅层遍历,实践上影响不大,而且对于数组,浏览器实现时做了优化,几乎没有性能损耗。综合看推荐使用Object.preventExtensions和Object.seal。
4.create
实例完成初始化observe后,即created中加入
export default {
data() {
return {}
},
created() {
this.bigData = {
···
}
}
···
}
5 .把属性改成不可枚举
- 设置属性不可枚举
- 使用Symble类型作为属性名称