【问题标题】:How to reduce useing of memory when I use Ajax使用 Ajax 时如何减少内存使用
【发布时间】:2019-05-24 14:20:32
【问题描述】:

我需要检查来自服务器的数据。我每 15 秒进行一次 Ajax 查询。但几个小时后,我的记忆溢出了。 我在 Opera、Firefox 和 Chrome 中尝试过,到处都是特别的结果

setTimeout(function timer() {
    Check();
    setTimeout(timer, 10000);
}, 10000);

function Check() {
    $.ajax({
        url: 'https://example/server/NEWS.php',
        type: "POST",
        catch: false,
        success: (data) => {
            CheckNews(data);
        }
    });
}

function CheckNews(data) {
    if (data == 'Try again') document.location.reload();
    data = JSON.parse(data);
    data.forEach(function (item, i, arr) {
        switch (item[0]) {
            case "Del": //Delete
                  console.log('Del);
                break;
            case 'Add': //Add
                console.log('Add ');
                break;

            case 'NewM':
                break;
            default:
        }
    });
    data = null;
}

【问题讨论】:

  • 这个假设得到了内存分析器分析的证实,显示的脚本被确定为原因?

标签: javascript ajax memory


【解决方案1】:

我对 jQuery 不太了解,但您可能会在 x 时间后删除数据。

此外,您的代码在删除部分有错误。你忘了结束'

【讨论】:

    【解决方案2】:

    我认为您正在寻找的是 setInterval。您一遍又一遍地调用 setTimeout ,并且每个函数调用都留在堆栈上,因为它在技术上还没有完成。我想这就是你有记忆问题的原因。

    【讨论】:

      【解决方案3】:

      您应该使用setInterval 函数而不是setTimeout 函数进行重复调用。 setInterval 函数针对重复调用进行了优化,将在指定的持续时间(作为第二个参数传递)后重复调用回调函数(作为第一个参数传递),直到您使用 clearInterval 函数清除间隔。因此,您可以将 setTimeout 函数替换为:

      setInterval(function() {
        Check();
      }, 10000);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-21
        • 2018-07-12
        • 2021-12-12
        • 2017-10-27
        • 1970-01-01
        • 2014-01-19
        • 2011-09-22
        相关资源
        最近更新 更多