vue 开发里面数据响应相关优化
在
Vue
开发中,经常会有加载大量数据的场景,如果按照原本的流程加载,Vue
会对data
中的数据设置数据响应式,有时候根本不需要进行响应式,仅仅是对其进行展示,这时候就可以使用Object.freeze
对其进行冻结,Vue
也不会再对其设置相关的响应式,页面加载速度会有一个质的提升。
冻结前
冻结后
从上面的分析结果看,将对象冻结后,响应式处理从>4000ms
降到了0.2ms
<template>
<div id="app">
<button @click="handleClick">click me</button>
<span>数据长度:{{ showData.length }}</span>
</div>
</template>
<script>
export default {
name: "app",
data() {
return {
showData: [],
};
},
methods: {
async handleClick() {
console.time("click");
this.loading = true;
/**
* 这里使用Object.freeze将对象冻结后,Vue内部将不再对其进行数据响应式设置
*/
// this.showData = Object.freeze(await this.getData());
this.showData = await this.getData();
this.loading = false;
console.timeEnd("click");
},
getData() {
return new Promise((resolve) => {
const result = [];
for (let i = 0; i < 1000000; i++) {
result.push({
id: i,
name: `name${i}`,
address: {
city: `city${i}`,
province: `province${i}`,
},
});
}
resolve(result);
});
},
},
};
</script>