Как уменьшить использование памяти, когда я использую Ajax - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно проверить данные с сервера. Я делаю Ajax-запрос каждые 15 секунд. Но через несколько часов моя память переполнилась. Я пробовал это в 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;
}

Ответы [ 3 ]

0 голосов
/ 24 мая 2019

Я думаю, что вы ищете, setInterval. Вы вызываете setTimeout снова и снова, и каждый вызов функции остается в стеке, потому что он технически не завершен. Я думаю, именно поэтому у вас проблемы с памятью.

0 голосов
/ 24 мая 2019

Для повторного вызова следует использовать функцию setInterval вместо функции setTimeout.Функция setInterval оптимизирована для повторных вызовов и будет вызывать функцию обратного вызова (передаваемую в качестве первого параметра) по истечении заданной длительности (передаваемой в качестве второго параметра) несколько раз, пока вы не очистите интервал с помощью функции clearInterval.Таким образом, вы можете заменить вашу setTimeout функцию на:

setInterval(function() {
  Check();
}, 10000);
0 голосов
/ 24 мая 2019

Я не знаю больше всего о jQuery, но вы, вероятно, могли бы удалить данные через x промежуток времени.

Кроме того, у вас есть ошибка в вашем коде в части удаления. Вы забыли поставить закрытие '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...