0
votes

Comment réduire l'utilisation de la mémoire lorsque j'utilise Ajax

Je dois vérifier les données du serveur. Je fais la requête Ajax toutes les 15 secondes. Mais après quelques heures, ma mémoire est débordée. Je l'ai essayé dans l'opéra, Firefox et Chrome, tout le résultat particulier

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;
}


1 commentaires

Cette hypothèse a été étayée par une analyse avec un profileur de mémoire, dans laquelle le script indiqué a été identifié comme la cause?


3 Réponses :


0
votes

Je ne connais pas le plus de jQuery, mais vous pouvez probablement supprimer les données après la quantité de temps x.

En outre, vous avez une erreur dans votre code à la partie Supprimer. Vous avez oublié de mettre une fermeture '


0 commentaires

0
votes

Je pense que ce que vous cherchez est seinterval. Vous appelez à nouveau sur la pile et chaque appel de fonction est laissé à nouveau sur la pile, car il n'est pas fini techniquement. Je pense que c'est pourquoi vous avez des problèmes de mémoire.


0 commentaires

0
votes

Vous devez utiliser la fonction seinterval au lieu de SetTimeout fonction de votre appel répété. Seinterval La fonction est optimisée pour les appels répétés et appellera la fonction de rappel (transmis comme le premier paramètre) après la durée de temps spécifiée (passée sous la forme du deuxième paramètre) jusqu'à ce que vous puissiez effacer l'intervalle en utilisant ClearInterval fonction. Donc, vous pouvez remplacer votre fonction settimeout avec: xxx


0 commentaires