2011-09-16 3 views
5

Per le applicazioni a esecuzione prolungata nel browser che utilizzano un toolkit come il dojo, sento ripetutamente il punto che i riferimenti penzolanti devono essere evitati. Ma ogni linguaggio/framework ha le sue idiosincrasie quando si tratta di gestione della memoria.Evita perdite di memoria nel dojo?

Come posso evitare i riferimenti ciondolanti durante la creazione di un'app nel dojo? Sto pensando a regole sulla falsariga di "allocare" in iOS: come usare e come ripulire dopo di te quando hai finito.

risposta

2

Penso che la cosa più importante che viene in dojo è che dovresti ricordare di disconnettere qualsiasi evento connesso.

C'è un motivo semplice per questo, per esempio in un dijit personalizzato:

//connecting some events 
this._events = [ 
    dojo.connect(...), 
    dojo.connect(...) 
]; 

adesso, è molto semplice da staccare:

dojo.forEach(this._events, dojo.disconnect, dojo); 

Lo stesso schema vale anche quando si utilizza this.connect in un dijit .

+1

Nota che i widget dijit puliscono automaticamente tutto ciò che è connesso a 'widget.connect' quando vengono distrutti - e in generale, tutti i widget vengono distrutti quando la pagina viene scaricata (almeno in IE, che storicamente è dove è stato dimostrato che conta). –

1

Si noti inoltre che anche se si segue la buona pratica di scollegare i gestori di eventi menzionati in this answer, si potrebbe finire nei guai. Potrebbero esserci riferimenti ciclici che il garbage collector non è in grado di rilevare, o riferimenti che non sono rilasciati correttamente da Dojo stesso. A volte è necessario chiamare esplicitamente "cancella" su di essi. Vedere this come esempio.

+0

Penso che sia il caso con qualsiasi set di strumenti. Ma la maggior parte ha alcune linee guida che possono aiutare con molte situazioni prevenibili. –