问题描述
我每 5 秒对我的 API 执行一次轮询方法,以获取实时数据。下面的代码有效,但在运行 1 小时后,页面崩溃了(糟糕,恐龙图像和错误:内存不足)。我正在收集的数据非常大,我希望每次再次调用该函数时 javascript 都会卸载内存(垃圾收集)。我可以在 Chrome 任务管理器中看到,内存占用量随着时间的推移而增长。有没有办法清除内存或卸载内存随着时间的推移而增长?
data(){
return{
newdata:[],};
},methods: {
loadData:async function () {
try {
let response = await axios.get('/monitoring_data');
if (response.status != 200) {
await new Promise(resolve => setTimeout(resolve,1000));
await this.loadData();
}else {
// Get the data
this.newdata= response.data.Ppahvc;
// Call loadData() again to get the next data
await new Promise(resolve => setTimeout(resolve,5000));
await this.loadData();
}
} catch (e) {
await this.loadData();
}
},},mounted:function(){
this.loadData();
},
解决方法
您正在调用 loadData 函数 recursivley(函数调用自身),这很可能是导致内存问题的原因,因为浏览器必须记住这些嵌套调用才能最终再次返回。
尝试使用迭代方法:
setInterval(function {
let response = await axios.get('/monitoring_data');
this.newdata = response.data.Ppahvc;
},5000);
,
您可以使用 setinterval
而不是调用 loadData 函数 recursivley