Pour utiliser sIEve:
Tu lances le soft, avec ta page de démo
Tu cliques sur le bouton "show in use", qui va te montrer tous les noeuds en mémoire dans une nouvelle fenetre.
Ensuite, tu fais apparaitre ton calendrier, puis dans la fenetre qui est apparue tu cliques à nouveau sur "show in use".
Tu sélectionnes une date, puis à nouveau sur "show in use". Normalement le calendrier à disparu
Tu cliques alors dans la fenetre principale sur "about
:blank", ce qui va changer la page pour une page blanche. Normalement, à ce moment la, tous tes objets devraient être déchargés de la mémoire puisque tu changes de page. Seulement si tu regardes sur l'autre fenetre, tu as toute la liste des objets qui trainent dans la mémoire, donc des fuites.
Pour supprimer les principales, ce qu'il faut savoir c'est que quand tu écris quelque chose comme ca:
this.YearTop.onmouseover = function(){this.className = "YearTopOver"};
tu crées à priori une référence circulaire qui engendre une fuite entre un objet DOM (this.YearTop) et un objet javascript (la fonction anonyme).
Pour supprimer cette référence, soit tu mets this.YearTop à null, soit tu mets this.YearTop.onmouseover à null après les avoir utilisés.
Le premier cas est bien adapté quand t'es dans une fonction simple mais comme là ton instance est partagée dans l'objet calendar, c'est pas l'idéal.
Le deuxième est assez simple a traiter, il te suffit de faire une fonction récurente appelée lorsque tu fermes ton calendrier, qui parcourt tous tes objets DOM à partir de ta div principale, et qui met à null tous les évenements que t'as pu leur ajouter (je regarderai ce soir si je retrouve ma fonction qui fait ca, mais pas sur du tout que je l'ai chez moi).
Partager