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; }
3 Réponses :
Je ne connais pas le plus de jQuery, mais vous pouvez probablement supprimer les données après la quantité de temps x. P>
En outre, vous avez une erreur dans votre code à la partie Supprimer. Vous avez oublié de mettre une fermeture ' code> p>
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. P>
Vous devez utiliser la fonction seinterval code> au lieu de
SetTimeout code> fonction de votre appel répété.
Seinterval CODE> 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 code> fonction. Donc, vous pouvez remplacer votre fonction
settimeout code> avec:
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?