Logo de Torre de Babel
Portada Libros Diseño web Artículos Glosario RSS
Buscar

Memory leaks en JavaScript

El uso de JavaScript se ha incrementado notablemente en los últimos años, sobre todo desde que el uso de tecnologías tipo AJAX ha ido haciéndose extensivo en el diseño de aplicaciones Web. Según EDC, el número de programadores que utiliza JavaScript triplica al de otros lenguajes interpretados con finalidad similar, como PHP o Perl. Este aumento en la utilización de JavaScript en proyectos más complejos ha provocado también la aparición de problemas que hasta hace poco no eran tales, como la pérdida progresiva de memoria por parte del navegador mientras se ejecuta la aplicación web.

JavaScript es un lenguaje dinámico en cuanto a la gestión de la memoria se refiere, de tal forma que el programador teóricamente no tiene que preocuparse de la liberación de los bloques que ya no están en uso. Existe, como en Java o la plataforma .NET, un recolector de basura que se ejecuta en segundo plano y va comprobando si las referencias existentes a cada bloque siguen siendo válidas, hay alguna variable apuntando a ese dato, o bien ya no resultan útiles, en cuyo caso se procede a su liberación.

El problema surge cuando se emplean jerarquías de objetos, algo muy habitual en DOM y en consecuencia en AJAX, en las que un padre apunta con una de sus propiedades a una lista de hijos y éstos, a su vez, mantienen una referencia al padre que les corresponde. Si se destruye la referencia al nodo padre, podría esperarse que tanto éste como los hijos asociados se liberasen, pero lo cierto es que el recolector de basura comprueba que hay objetos, los nodos hijo, que mantienen referencias al padre, por lo que éste no se libera. Al no liberarse, existe un objeto que tiene referencias a los nodos hijo, que tampoco se liberan.

La solución, en casos así, pasa por recorrer todos los nodos hijo haciendo nula la referencia a sus respectivos padres, eliminando finalmente el nodo principal. De esta forma se asegura la correcta liberación de todos los bloques de memoria ocupados.


Publicado el 29/2/2008

Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web