非响应式
有些数据是不需要响应式处理的,我们可以让vue不进行数据响应式收集。
1.将数据定义在export default之外
const obj = {...}export default {...}
2.定义在$options
export default {···mydata: { // 自定义属性....},methods: {doSomething() mydatareturn 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类型作为属性名称
 
