6
votes

Fuite de mémoire avec demande AJAX + jQuery

Je récupère à plusieurs reprises un objet JSON du serveur avec des appels AJAX. Au fil du temps, l'utilisation de la mémoire du navigateur grandit (essayé avec Chrome, safari, Firefox). En utilisant les instantanés de tas de Chrome, j'ai découvert que les cordes d'horodatage sont laissées sans références. Si je prends une séquence d'instantanés, je vois que le nombre de chaînes augmente continuellement. XXX

Autres notes:

  • J'utilise jQuery 1.7.1. EDIT: Just essayé avec 1.6.2 et 1.4.2, même problème.
  • Le horodatage de l'objet JSON est en réalité un entier, pas une chaîne. De sorte que les chaînes accumulées peuvent être des valeurs temporaires?
  • Suppression du + DetReTTMESTAMP de la demande AJAX arrête la fuite.
  • Un SettimeOut plus rapide (20 ms) provoque la fuite plus rapidement. Je pensais que le délai rapide pourrait être à blâmer, alors je le coupe à 250 ms, mais cela n'a pas aidé.

3 commentaires

@Vega fetchdata est déjà là dans le code;) (ligne 4)


Peut-être que JQuery préférera $ ..get ("/ paramètre", {format: "JSON", depuis: dactdTimetamp}, gotdata);


@nikoshr idée cool. Je viens de l'essayer, mais ça fuit encore.


3 Réponses :


0
votes

Une fois que vous avez terminé avec des données [], vous pouvez vous en débarrasser:

function gotData(data) {
    latestTimestamp = data['timestamp'];
    delete data;
    setTimeout(fetchData, 250);
} 


1 commentaires

Je viens de donner cela un essai, mais les instantanés de tas de Chrome montrent toujours un nombre constant croissant de chaînes entre instantanés.



0
votes

Je crois que ce problème réside avec jQuery et / ou navigateur. J'ai vu des fuites similaires avec des appels souvent ajax.

au lieu d'interroger le serveur 4 fois une seconde envisagez de pousser les données du serveur au client. Je ne sais pas quelle plate-forme que vous utilisez, mais si c'est .net, vous voudrez peut-être jeter un coup d'œil sur Signalr

https://github.com/signalr/signalr

http://www.haselman.com/blog/asynchronousscalablewebApplicationsWithrealTimePersisTentLongRunningConnectionsWithSignalR.aspx < / p>


1 commentaires

Eh bien, je n'utilise pas .NET, et le serveur que je travaille est personnalisé et écrit en C ++, mais peut-être que Real Server-to-Client Push est quelque chose que je devrais examiner.



1
votes

Avez-vous essayé la fonction de CleartimeOut JavaScript? Sinon, essayez ceci. XXX


0 commentaires