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 ·.

miércoles, 19 de mayo de 2010

PageMethods y [WebMethod]

El día de hoy aprendí sobre los PageMethods:

Aunque yo haría la validación en Javascript en lugar de dejar que el servidor la haga (aún cuando la información enviada es poca):
http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx

Explicando porque es malo usar los Update Panels... la parte más interesante es la del viewstate... siempre viaja con los update panels, por lo que si en tu vida te has preocupado por cuidar tu viewstate (como los desarrolladores de cierta aplicación con la cual estuve trabajando hasta hace poco), de nada servirá "usar Ajax" porque es casi como si mandaras tu página completa. En fin... mejor no hago berrinche
http://blogs.msdn.com/b/davidsalgado/archive/2008/05/05/asp-net-ajax-updatepanel-vs-asp-net-pagemethod.aspx

Y pues, el Script Manager siempre se me ha hecho demasiado grande y pesado, por lo que la idea de no usarlo es genial:
http://geeks.ms/blogs/jmaguilar/archive/2008/06/02/acceder-a-pagemethods-con-jquery.aspx

http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Debo admitir que es algo que empezaré a usar siempre que alguien más ya haya referenciado el .Net Ajax Framework, pero no es algo que yo metería a una aplicación desde 0. Prefiero usar el ajax a patita, cual vil cavernicola:

Cavernicola

Pero bueno, una vez más, los links aquí guardados por si a alguien más le interesan y para acordarme con eso de que el Alzhaimer está cada día peor... :S

martes, 30 de marzo de 2010

Planta 2


Planta 2, originalmente cargada por CapcamGto.

¿Envidia?


¿Envidia?, originalmente cargada por CapcamGto.

:D

jueves, 25 de marzo de 2010

I'm stuck on you.


I'm stuck on you., originalmente cargada por Daifuku Sensei [ on & off ].

...

domingo, 21 de marzo de 2010

Use toilets!

Jajajajaja... Prometo ya no cagar en el bosque

viernes, 19 de marzo de 2010

Need some drinks ?


Need some drinks ?, originalmente cargada por Mr.MVP.

yep...

viernes, 19 de febrero de 2010

.close.your.eyes.and.make.a.wish


.close.your.eyes.and.make.a.wish, originalmente cargada por ZeeQ8.

Cuando eres feliz

Cuando eres feliz todo es hermoso y sale bien. En particular el día de hoy, al menos desde mi oficina, se ve realmente precioso.
Hasta me gustaría tener una camara en este momento y poder tomarle una foto (ya lo intenté con la webcam de la lap y parece haber salido bien).



En fin, Feliz cumpleaños en este hermoso día.




Day 95: Happy Birthday to Me., originalmente cargada por SaylaMarz.



:D

viernes, 5 de febrero de 2010

Soy soporte técnico

Después de algunos meses (realmente no se cuantos y no tengo tiempo en este momento de ponerme a averiguarlo y contarlos), recibí mi respuesta.

Soy soporte técnico.

No fue una respuesta directa. Al contrario, creo que fue bastante indirecta y bastante forzada.

- ¿Estás contento? ¿soporte técnico?

- No lo sé... pensé que cuando me hablara me pondría muy nervioso y realmente estuve muy tranquilo. Los nervios empezaron hasta dos o tres horas después. Y pues bueno, si lo puse como opción en mi pregunta es porque creí que era posible que solo quisiese eso entonces creo que estoy preparado para solo ser eso. Que me hubiera gustado algo distinto, supongo que si. Contento... pues si, suficientemente contento con haber oido su voz de nuevo.

- ¿Esperanzas de nuevo?

- Aún no demasiadas... no creo que se le descomponga muy seguido su máquina.