2012-01-05 18 views
9

Un mio collega imposta sempre le loro variabili jQuery per nulla, a loro smaltimento in modo efficace, una volta che sono finiti con, per esempio:Dovresti smaltire oggetti jQuery?

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

È davvero necessario?

+0

possibile duplicato di [È buona pratica impostare le variabili su null quando non sono più necessarie?] (Http: // stackoverflow.it/questions/7189809/javascript-set-value-to-null) –

+0

Grazie, sì, la domanda è molto simile e ha una risposta eccellente. – Jay

risposta

8

Se si incapsula il proprio codice in funzioni che non sono necessarie poiché dopo la fine della funzione le variabili locali verranno comunque eliminate quando nessun riferimento ad esse viene utilizzato altrove.

Il mantenimento su un selettore/variabile (caching) potrebbe avere un effetto positivo se è necessario selezionare la stessa cosa più e più volte rispetto alla selezione di una sola volta e mantenendo la variabile.

0

Anche se non del tutto necessario, questo può essere fatto per assicurare che il GC lo cancelli nella sua prossima esecuzione (cosa che comunque farà per tutte le allocazioni alle quali non si ha nemmeno 1 riferimento).

Nel tuo esempio, però, l'oggetto $ (corpo) (jQuery esteso oggetto, non l'oggetto corpo DOM) verranno cancellati se si imposta bigThing a qualsiasi altra cosa (non necessariamente null)

2

Non è necessario, ma buona abitudine per rimuovere il riferimento e rilasciare la memoria

0

Javascript ha il proprio garbage collector. Pertanto, sembra che non sia necessario disporre esplicitamente degli oggetti.

Ma a causa di vari motivi, ad esempio una cattiva implementazione del garbage collector, ecc., Possono verificarsi perdite di memoria.

Annullandoli esplicitamente, si specifica al browser che questa memoria deve essere cancellata nella successiva garbage collection.

In conclusione, sebbene non sia necessario farlo, sarebbe una buona pratica annullare gli oggetti JQuery/javascript.

+5

Penso che "annullare un oggetto" sia un termine improprio. Sicuramente annulli la variabile; l'oggetto è semplicemente dereferenziato. – PPvG

2

Risposta breve: non è quasi mai necessario se si utilizza jQuery.

Dipende da cosa l'hai fatto. Se non hai collegato alcun gestore di eventi al nodo DOM, il garbage collector lo cancellerà quando non sarà più referenziato.

Ma anche se si sono associati gestori di eventi, jQuery si prenderà cura di loro in funzioni come .remove() e .empty() staccando tutti i gestori di eventi per conto proprio. Quindi, se usi jQuery per interagire con il DOM, sei al sicuro.

Senza jQuery, se hai collegato un gestore di eventi al Nodo, il GC non lo cancellerà, anche dopo aver rimosso il Nodo dall'albero DOM e non hai più riferimenti ad esso. Questo perché il Nodo DOM contiene un riferimento a un oggetto JavaScript (ad esempio il gestore di eventi) e viceversa. Questo crea un riferimento ciclico attraverso due sistemi separati; qualcosa con cui la maggior parte dei netturbini ha problemi.

Per ulteriori informazioni, vi rimando allo Douglas Crockford's article on Memory Leaks.

Problemi correlati