2011-09-16 18 views
5

Para aplicaciones de larga ejecución en el navegador que usan un conjunto de herramientas como dojo, escucho el punto una y otra vez de que se deben evitar las referencias colgantes. Pero cada idioma/marco tiene su propia idiosincrasia en lo que respecta a la gestión de la memoria.Evitar fugas de memoria en el dojo?

¿Cómo puedo evitar referencias colgantes cuando construyo una aplicación en dojo? Estoy pensando en reglas a lo largo de las líneas de "alloc" en iOS: cómo usarlas, y cómo limpiarlas después de terminarlas.

Respuesta

2

Creo que lo más importante que llega a dojo es que debes recordar desconectar los eventos que conectas.

Hay un patrón simple a este, por ejemplo en un dijit personalizado:

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

Ahora, es muy sencillo para desconectar: ​​

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

El mismo patrón se aplica cuando se utiliza this.connect en un dijit .

+1

Tenga en cuenta que los widgets dijit limpian automáticamente todo lo conectado con 'widget.connect' cuando se destruyen y, en general, todos los widgets se destruyen cuando la página se descarga (al menos en IE, que históricamente es donde se ha demostrado que importa) –

1

También se debe tener en cuenta que incluso si sigue la buena práctica de desconectar los controladores de eventos mencionados en this answer, podría terminar en problemas. Puede haber referencias cíclicas que el recolector de basura no es capaz de detectar, o referencias que no son lanzadas apropiadamente por el propio Dojo. A veces necesita llamar explícitamente "eliminar" en ellos. Ver this como un ejemplo.

+0

Creo que ese es el caso con cualquier conjunto de herramientas. Pero la mayoría tiene algunas pautas que pueden ayudar con muchas situaciones prevenibles. –