0

J'ai une page où je charge une table d'information en utilisant ajax. Une fois la table chargée, j'utilise jquery pour câbler certains gestionnaires d'événements sur les lignes de la table.Le remplacement du contenu par jquery entraînera-t-il des fuites de mémoire dans IE8?

De cette page, il est possible pour l'utilisateur d'actualiser cette table. Mon code jquery pour rafraîchir la table ressemble à ceci:

$.post("/myurl", { id: 0}, 
     function (d) 
     { 
      $("tblWrapper").html(d); 

      //Wire events 
      $("table tr", $("tblWrapper")).click(function (e) { ... }); 
      ...etc 
     }, "text"); 

J'ai remarqué que après avoir fait plusieurs fois que la page répondra très slugishly lorsque je tente de faire tout le défilement ou l'animation dans IE8.

Ma question est, qu'est-ce que je fais mal, qui le rend de plus en plus lent? Puis-je nettoyer les anciens gestionnaires html/event avant de les remplacer par de nouveaux gestionnaires html et new? J'avais pensé que le moteur de JS pourrait le faire automatiquement. Peut-être que c'est le cas et que c'est juste lent à faire le nettoyage, je ne sais pas.

J'ai remarqué que le temps processeur sur IExplorer va à 50%.

J'apprécierais grandement toute aide.

Répondre

0

Je ne suis pas sûr que ce soit le problème ou non, mais gardez-vous d'ajouter les mêmes lignes à plusieurs reprises? Cela pourrait devenir plus lent car il y a de plus en plus de lignes dans la table.

Vous pouvez faire quelque chose comme $ ("table tr"). Remove() pour effacer les lignes.

+0

Non, le contenu de tblWrapper est remplacé par le nouveau html de l'appel ajax à chaque fois. Mais je ne sais pas si les anciens gestionnaires d'événements ne sont pas nettoyés ou si je garde une référence à un objet jquery quelque part. J'espérais qu'il y avait un modèle pour ce type de situation que je pourrais suivre pour éviter le problème. – user169867

+0

Je voudrais d'abord supprimer les lignes existantes en utilisant la fonction .remove(), avant de repeupler le contenu. Cela supprimera tous les gestionnaires par: http://api.jquery.com/remove/ – mdm20

+0

OK, cela semble prometteur. Je vais essayer et poster. – user169867