由于内存不足,Chrome 在运行 1 小时后崩溃 Javascript 内存管理问题可能

问题描述

我每 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