8
votes

Devez-vous disposer d'objets jQuery?

Un collègue de la mine définit toujours leurs variables jQuery à NULL, pour les éliminer efficacement, une fois qu'ils sont terminés, par exemple:

var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;


5 Réponses :


7
votes

Si vous encapsulez votre code dans des fonctions qui sont inutiles comme une fois la fonction terminée, les variables locales seront utilisées de toute façon lorsque aucune référence n'est utilisée ailleurs.

Holding sur un sélecteur / variable (la mise en cache) peut avoir un effet positif que si vous devez sélectionner la même chose encore et encore par rapport à la sélection que la seule fois et en conservant la variable.


0 commentaires

0
votes

Bien que non entièrement nécessaire, cela peut être fait pour s'assurer que le GC l'effache dans sa prochaine course (ce que cela fera de toute façon pour toutes les allocations à laquelle vous n'avez même pas 1 référence).

Dans votre exemple, l'objet $ (corps) (l'objet étendu jQuery étendu, pas l'objet du corps DOM) sera effacé si vous définissez grossissement sur quoi que ce soit d'autre (pas nécessairement null)


0 commentaires

2
votes

Ce n'est pas nécessaire mais bonne habitude d'éliminer la référence et de libérer la mémoire


0 commentaires

0
votes

JavaScript a son propre collecteur à ordures. Donc, il semble que vous n'aviez pas besoin de disposer explicitement des objets.

Mais en raison de diverses raisons, comme une mauvaise mise en œuvre du collectionneur des ordures, etc., il peut arriver que leurs fuites de mémoire sont des fuites de mémoire.

En les annulant explicitement, vous spécifiez le navigateur que cette mémoire doit être effacée dans la prochaine collecte des ordures.

En conclusion, même s'il n'est pas nécessaire de le faire, ce sera une bonne pratique pour annuler les objets JQuery / JavaScript.


1 commentaires

Je pense que "annuler un objet" est un abu. Vous annulez sûrement la variable; L'objet est juste déréférencé.



3
votes

Réponse courte: Non, ce qui n'est guère nécessaire si vous utilisez jQuery.

Cela dépend de ce que vous avez fait avec. Si vous n'avez pas joint de gestionnaires d'événements au nœud DOM, le collecteur des ordures claquera quand il n'est plus référencé.

Mais même si vous avez attaché des gestionnaires d'événements, JQuery s'occupera d'eux dans des fonctions telles que .ReMove () < / a> et .Peempty () en détachant tous les gestionnaires d'événements pour vous. Aussi tant que vous utilisez JQuery pour interagir avec le DOM, vous êtes en sécurité.

sans jQuery, si vous avez attaché un gestionnaire d'événements au nœud, le GC ne le fera pas, même après avoir supprimé le nœud de l'arbre DOM et que vous n'avez plus de références. En effet, le nœud DOM contient une référence à un objet JavaScript (c'est-à-dire le gestionnaire d'événements) et inversement. Cela crée une référence cyclique sur deux systèmes distincts; quelque chose que la plupart des collectionneurs à ordures ont des problèmes.

Pour une lecture supplémentaire, je vous pointe de Article de Douglas Crockford sur les fuites de mémoire .


0 commentaires