lunes, 27 de febrero de 2012

jQuery memory leaks in IE 6 and 7

Some years ago, while I was working for Digipro, I was assigned to the development of a control used to display digitalized images using only HTML and javascript. The previous control was developed using ActiveX controls and was having serious difficulties with the increse of security of IE.

Digipro has an application that is used to digitalize images, store them in a database and then query and display them. This application is used by several institutions here in Mexico, most of them banks and finantial institutions.

I started using jQuery for this project, and everything went really smoth and I learnt a lot. But while doing some testing I saw that the memory footprint of IE was growing each time I loaded a new image (about 1 Mb per load). One client noticed it and reported it, but at that time IE 8 went out and they upgraded and everything went fine from there so I never really investigated this bug.

Last week the development manager from Digipro called me because, for some clients, the application became slow and even unresponsive after about and hour using it. It turned out that these clients are still using IE 6 and IE 7 in most of their computers. The manager asked me to debug this component and help them correct this behavior.

I started installing and creating two virtual machines with XP Mode, one with IE 6 and the other with IE 7 to be able to reproduce the bug; and then mounting all the services and application in my development computer.

While using the application I noticed that the developers at Digipro were busy getting a lot of stuff into the component I developed and it have a lot of new functionality. The next thing I noticed was that the memory footprint if IE 7 was growing about 20 Mb each time a new image was loaded and it never went down until I closed the browser. WTF! 20 Mb! When this bug was reported to me (3 years ago) the memory grew less than 1 Mb per image.

After reading a lot of Memory Leaks of javascript in IE
(links:
http://192.168.202.189/IDPortalV9/Wfrm_SB_IntegraMC.aspx?nProyId=3&sUsrID=1139819&sUsrAS=sea&sPlazaID=999&sSucursalID=999&sPerfilID=1502&sAgenciaID=
http://msdn.microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx
http://stackoverflow.com/questions/1261244/how-to-use-ie7-javascript-memory-leak-detectors
http://home.wanadoo.nl/jsrosman/sievehelp.htm
http://blogs.msdn.com/b/ie/archive/2007/11/29/tools-for-detecting-memory-leaks.aspx
http://javascript.crockford.com/memory/leak.html
http://www.codeproject.com/Articles/12231/Memory-Leakage-in-Internet-Explorer-revisited
http://www.javascriptkit.com/javatutors/closuresleak/index.shtml
)

I realized that I needed a tool to help me find them. So I downloaded DripsIEve, and IEJsLeaksDetector. All of them great applications.

The tools reported several leeks each time an image was unloaded and a new one was loaded. This step does a postback to the server and all controls of the page are re-created.



I was shocked to see that most of the leeks where related to jQuery functions. I was expecting to find some really nasty and obvious bugs in the code of the component.
So I started to unbind every event of every object I found. And the memory footprint started going down until it reached about 5 Mb per image. At that point, the only leaks that sIEve was reporting where related to the jQuery UI draggable plugin and I was having a hard time trying to remove them. So in a moment of despair I tried to select all objects and unbind all events from them.



I was really shocked to find out that sIEve was still reporting the same leaks, and more over, IEJSLeaksDetector was showing that the window object hasn't been disposed. And the memory kept growing about 4 Mb after each image load.




So I started looking on the web for this strange behavior and found several reports of it. Two of them where bug reports in the jQuery Bug Tracker. Tickets 6421 and 8863. The first one of them had a proposed solution and after implementing it, the leaks were gone.



So, after this weekend that almost was a nightmare I have decided to bill a lot more each time an application have to support IE 6 or IE 7.

jueves, 24 de noviembre de 2011

¿Quieres que seamos amigos?

Anoche soñé contigo y soñé que intentabamos ser amigos.

Friendship

No recuerdo demasiado del sueño ni de como empezaba. Recuerdo que yo vivía en una casa grande y vieja, tal vez recordando a la casa del baratillo; acababa de entrar a la casa y me dirigía a mi cuarto que tenía una mesa muy grande en el centro, como de comedor y en esa mesa habías dejado un regalo para mi, un libro si la memoria no me falla. Y junto con el libro habías dejado algunos papeles o cartas o algo así. El único del que más o menos me acuerdo es del "decálogo para ser amigos" que contenía 10 reglas que debíamos seguir para poder ser amigos. Algo acerca de las llamadas y los mensajes, las visitas y el facebook y no se que más.

Friendship algorithm

Me gustaría recordar exactamente que decían las reglas, solo recuerdo que estabán escritas en un lenguaje que simulaba ser técnico o de programación lo cual las hacía muy divertidas: "Los números de celular están compuestos de tres secuencias de números de 4 dígitos la primera y 3 dígitos las otras dos, se podrán enviar mensajes usando únicamente las dos primeras secuencias. La tercera solo podrá ser usada en casos de extrema emergencia o invitación al cine [...]"

No recuerdo mucho del resto del sueño, no se como terminaba, si logramos ser amigos o no. De cualquier manera quiero intentarlo. Se que no será fácil y a veces no será demasiado divertido. Pero se que vale la pena intentarlo.

friendship


"In the end, how many 25-year friends can you hope to make in one lifetime? How many do you really need? I would have said “only one,” but it turns out what I meant was “one who will outlive me.”
So, two."
Mark Pilgrim 

jueves, 3 de noviembre de 2011

Luna Adobe



Luna Adobe, originalmente cargada por CapcamGto.
Oaxaca solía ser un lugar mágico y hermoso. Quedan pocos lugares como el de ésta foto. El resto ha sido destruido por la estupidez de los políticos y la desidia de la gente que la habita.
Es muy triste la verdad.

Rompecabezas



, originalmente cargada por CapcamGto.
Soy un fanático de los rompecabezas. Armarlos suele relajarme mucho y me enajena. Lo cual siginifica que no hago otra cosa que querer armarlo hasta terminarlo. Este fué el primer rompecabezas que he armado junto con mi esposa.

Espero haya muchos mas...

sábado, 19 de febrero de 2011

Feliz Cumpleaños



Feliz Cumpleaños... y muchos más

martes, 5 de octubre de 2010

Cuentas restringidas en AspNet

Siempre me ha dado cosa ver que se usan usuarios con todos los privilegios en las aplicaciones de ASP .Net en las que he trabajado. Todas menos una y con la cual aprendí que se podían restringir los permisos del usuario con el que trabaja la aplicación, o mejor aún, cambiarlo por uno especifíco que tenga ya los permisos que queremos.

En esa empresa se usaba un documento que no se de donde obtuvieron y que no he vuelto a ver por ningún lado, el cual se llamaba SecNet.pdf

La parte que indicaba cuales eran los permisos mínimos que necesitaba una cuenta para ejecutar una aplicación de Asp.Net la acabo de encontrar en esta liga.http://msdn.microsoft.com/en-us/library/Aa508562.

Once and again, básicamente para que no se me olvide.

miércoles, 22 de septiembre de 2010

El día de hoy el Zaulento me pasó una liga a u blog que me ha parecido genial.

Lo comparto con ustedes (ja, ¿quienes? nomas pa que no se me olvide) y puedan disfrutar del genial humor de este diseñador.

Cinismo Ilustrado

domingo, 12 de septiembre de 2010

Lei (primera parte) Post

Bueno, el post de Lei lo empecé a escribir hace mucho y por fin me animé a publicar lo que llevo, la primera parte, pero como empecé hace ya casi un año el post no aparece en la primera página, así que aquí está el link: Lei (Primera Parte)

Jajajajaja

Ahora que blogger activó esas cosas de las estadísticas y demás cosas (que se pueden consultar con el google analytics) me siento ridículo... Originalmente creí que no tendría ninguna o casi ninguna visita esta cosa rara. Ahora resulta que mi mercado son los que buscas las fotos de chicas que pongo por aquí.

Jajajajaja

A farmear Flicker se ha dicho... :P

jueves, 10 de junio de 2010

anymore.


anymore., originalmente cargada por · Pompas de Jabón ·.