Je rencontre des problèmes pour résoudre les fuites de mémoire de backbone, jusqu'à présent, j'ai tenté de nettoyer les vues en utilisant jquery CleanData lorsque les vues sont en train de se retirer du DOM.Backbone fuit encore la mémoire après plusieurs tentatives de nettoyage
Chaque fois qu'une vue est supprimée (même via jQuery .html()), elle frappe la méthode dispose() qui devrait théoriquement tuer toutes les références qui empêchent la collecte de la vue. Malheureusement, l'application vient de construire la mémoire
Codeci-dessous,
Backbone.View.prototype.dispose = function(){
// unbind all events, so we don't have references to child views
this.unbind();
this.off();
// if we have a collection - unbind all events bound to this context
this.collection && this.collection.off(null, null, this);
// do the same with a model
this.model && this.model.off(null, null, this);
delete this;
};
données propres:
$.cleanData = function(elems) {
$.each(elems, function(i, elem) {
if (elem) {
$(elem).trigger("dispose");
}
});
oldClean(elems);
};
Le travail de code, d'en disposer est touché (j'ai ajouté l'événement dans la vue), mais il est jamais recueilli quand je change de page. (A propos de l'événement d'élimination ..) Je n'appelle pas explicitement remove sur toutes les vues. le conteneur de l'application est vidé, jQuery fait cleanData. J'ai ajouté un événement disposer & Je déclenche cette fonction dans cleandata
Je suis confus à la façon dont vous semblent supprimer les liaisons .. '.trigger $ (élém) ("disposer"); 'est un sélecteur jQuery et vous êtes censé nettoyer la vue Backbone. Alors pourquoi ne pas simplement appeler 'this.dispose()' lorsque vous êtes dans la vue –
car je n'appelle pas explicitement remove sur toutes les vues. le conteneur est vidé, jQuery fait cleanData et j'ai ajouté un événement dispose que appelle cette fonction –
Avez-vous regardé Marionette qui étend les capacités de Backbone.js. Marionette semble faire un très bon travail pour garder Backbone propre et exempt de fuites de mémoire. – Kalpers