Hey all, I believe I have found a leak and have the beginnings of a solution to it.
I'm writing an app that preforms ajax searching that returns pretty large result sets. I render them via jQuery into a tbody. once a subsequent search is performed I call tbody.empty() and append the new results. I created a test harness that would perform a predefined search 5000 times in a row with a good amount of time in between. I noticed that IE was allocating quite a bit of memory and never reclaiming it. At first I thought it was a closure or circular reference on my part. Once I was sure I had removed them I ran more test, sure enough it was still allocating a lot of memory. Through a lot of research I found this article http://www.scribd.com/doc/2159768/Ajax-Part2 which says that JS's removeChild will leak in IE. Microsoft uses another method to remove which is essentially this: function DestroyElement(elem) { var garbageBin = document.getElementById('IEMemoryLeakGarbageBin'); if(garbageBin === undefined) { garbageBin = document.createElement("DIV"); garbageBin.id = "IEMemoryLeakGarbageBin"; garbageBin.style.display = 'none'; document.body.appendChild(garbageBin); } garbageBin.appendChild(elem); garbageBin.innerHTML = ""; } I went through jQuery 1.2.6 and replaced the removeChild references with a check for IE, and if so use this, else use the regular removeChild. After doing so and rerunning my test I saw drastic improvements in memory being reallocated after my elements were removed from the document. I also ran these test on FF, with or without this change it ran the same way, recollecting memory correctly. this is only seems to be a drastic performance increase if you are creating 1000+ dom elements and binding events to them, but, the app I am writing has to be able to run all day with out leaving or refreshing the page. I just thought the Dev team might be interested in my findings. I plan on striping this down and writing conclusive tests and documentation over the weekend. -Chris --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---
