We're trying to remove all browser sniffing, so if not too crucial...
I think this would do...

On Wed, Dec 3, 2008 at 7:31 PM, Chris Robinson <[EMAIL PROTECTED]> wrote:
> I tried this in FF3, IE7 and Chrome.  Seems to work fine.  The outerHTML =
> '' will be overhead for browsers that dont need it, but not sure how it
> compares to the overhead of the extra jQuery.browser.ie if statement.
>
> On Wed, Dec 3, 2008 at 4:10 PM, Ariel Flesler <[EMAIL PROTECTED]> wrote:
>>
>> Ok, thanks for the explanation, we'll look into this for 1.3.
>>
>> What about:
>>
>> if (this.parentNode)
>>    this.parentNode.removeChild(this);
>> this.outerHTML = '';
>>
>> On Wed, Dec 3, 2008 at 7:05 PM, Chris Robinson <[EMAIL PROTECTED]> wrote:
>> >
>> > Both "leak" but not in the classic sense.  IE uses 2 separate instances
>> > of
>> > the DOM.  One is DOM in javascript, One is the DOM of the HTML that's
>> > rendered in the browser.  This leak we are seeing is not orphaned tags
>> > (Which is what programs like sieve keep track of).  The leak is
>> > javascript
>> > DOM memory that's being used but not reclaimed once the DOM elements are
>> > removed.  Reason being, in certain cases IE will crash if a code block
>> > tries
>> > to reference DOM elements that no longer exists.  In general using
>> > removeChild in IE causes the browser to do a poor job identifying what
>> > references can and cannot be garbage collected.  These inner/outer HTML
>> > methods seem to force IE's hand into doing a better (although not great)
>> > job
>> > of cleaning up.
>> >
>> > After running the tests at 2000 iterations it seems as though the outer
>> > method is just about as effcient as cleaning up as the innerHTML method.
>> >
>> > Essentially it comes down to changing the remove method to be the
>> > following:
>> >
>> > remove: function( selector ) {
>> >         if ( !selector || jQuery.filter( selector, [ this ] ).r.length )
>> > {
>> >             // Prevent memory leaks
>> >             jQuery( "*", this ).add(this).each(function(){
>> >                 jQuery.event.remove(this);
>> >                 jQuery.removeData(this);
>> >             });
>> >             if (this.parentNode) {
>> >                 if (jQuery.browser.msie) {
>> >                     this.outerHTML = '';
>> >                 }
>> >                 else {
>> >                     this.parentNode.removeChild(this);
>> >                 }
>> >             }
>> >
>> >         }
>> >     }
>> >
>> > the "evalScript" and "clean" methods also use removeChild under the hood
>> > but
>> > im not so sure they get used often enough to warrent a change.
>> >
>> > -Chris
>> >
>> >
>> > On Wed, Dec 3, 2008 at 8:22 AM, Ariel Flesler <[EMAIL PROTECTED]>
>> > wrote:
>> >>
>> >> So... let me get this right, both leak but innerHTML leaks less ?
>> >>
>> >> On Wed, Dec 3, 2008 at 2:45 AM, Chris Robinson <[EMAIL PROTECTED]>
>> >> wrote:
>> >> >
>> >> > After a good deal of testing at 250 test runs it seems that the
>> >> > innerHTML
>> >> > "garbage bin" and outerHTML methods are almost identical when it
>> >> > comes
>> >> > to
>> >> > memory usage.  outerHTML uses a VERY small amount more (around 36k).
>> >> >  I
>> >> > am
>> >> > going to rerun the test at 2000 iterations to see if it makes a
>> >> > difference.
>> >> >
>> >> > Again, sorry for the delay, work is very hectic these days.  I should
>> >> > be
>> >> > able to report back tomorrow during the day (fingers crossed).
>> >> >
>> >> >
>> >> > On Mon, Dec 1, 2008 at 3:26 PM, Andrea Giammarchi
>> >> > <[EMAIL PROTECTED]> wrote:
>> >> >>
>> >> >> Just as extra info, it seems that innerHTML with IE does a good
>> >> >> work,
>> >> >> it
>> >> >> is like minimizing the window and maximizing it back. The problem is
>> >> >> that it
>> >> >> is not usable to force the CollectGarbage (that does not do its work
>> >> >> as
>> >> >> expected to me ...) ... does anybody else has bad experience with IE
>> >> >> and
>> >> >> ExtJS over jQuery? :D
>> >> >>
>> >> >> On Thu, Nov 27, 2008 at 7:12 PM, Andrea Giammarchi
>> >> >> <[EMAIL PROTECTED]> wrote:
>> >> >>>
>> >> >>> Ariel I did a quick test with I don't remember which document and I
>> >> >>> received an error.
>> >> >>> Unfortunately I had no time to investigate but I have exactly the
>> >> >>> same
>> >> >>> problem, "empty does not empty" at all.
>> >> >>>
>> >> >>> If the trick with outerHTML works I'll try tomorrow in my
>> >> >>> application
>> >> >>> and
>> >> >>> I'll tell you.
>> >> >>>
>> >> >>> Regards
>> >> >>>
>> >> >>> On Thu, Nov 27, 2008 at 1:39 PM, Ariel Flesler <[EMAIL PROTECTED]>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> So how do you know some cause errors if you haven't tested yet ?
>> >> >>>>
>> >> >>>> On Thu, Nov 27, 2008 at 9:47 AM, Andrea Giammarchi
>> >> >>>> <[EMAIL PROTECTED]> wrote:
>> >> >>>> > I guess textNodes, html itself and probably iframes.
>> >> >>>> > I'll tell you as soon as I can test stuff :-)
>> >> >>>> >
>> >> >>>> > On Wed, Nov 26, 2008 at 1:21 PM, Ariel Flesler
>> >> >>>> > <[EMAIL PROTECTED]>
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> Which nodes generate an error ?
>> >> >>>> >>
>> >> >>>> >> On Wed, Nov 26, 2008 at 5:53 AM, Andrea Giammarchi
>> >> >>>> >> <[EMAIL PROTECTED]> wrote:
>> >> >>>> >> > Hi Ariel, is this what you would apply for each nested node
>> >> >>>> >> > in
>> >> >>>> >> > case
>> >> >>>> >> > of
>> >> >>>> >> > $.empty() ?
>> >> >>>> >> >
>> >> >>>> >> > The only problem I can see is with nodes that generate an
>> >> >>>> >> > error
>> >> >>>> >> > if
>> >> >>>> >> > outerHTML
>> >> >>>> >> > property is assigned and a try catch could decrease execution
>> >> >>>> >> > speed.
>> >> >>>> >> >
>> >> >>>> >> > Any ideas?
>> >> >>>> >> >
>> >> >>>> >> > Regards
>> >> >>>> >> >
>> >> >>>> >> > On Tue, Nov 25, 2008 at 11:30 PM, Ariel Flesler
>> >> >>>> >> > <[EMAIL PROTECTED]>
>> >> >>>> >> > wrote:
>> >> >>>> >> >>
>> >> >>>> >> >> Well... I concluded a nicer solution and asked you to try
>> >> >>>> >> >> it.
>> >> >>>> >> >> But you never replied...
>> >> >>>> >> >>
>> >> >>>> >> >> http://dev.jquery.com/ticket/3553
>> >> >>>> >> >>
>> >> >>>> >> >> if (this.parentNode)
>> >> >>>> >> >>        this.parentNode.removeChild( this );
>> >> >>>> >> >> if (jQuery.browser.msie)
>> >> >>>> >> >>        this.outerHTML = "";
>> >> >>>> >> >>
>> >> >>>> >> >> --
>> >> >>>> >> >> Ariel Flesler
>> >> >>>> >> >> http://flesler.blogspot.com/
>> >> >>>> >> >>
>> >> >>>> >> >> On Nov 25, 3:28 pm, "Chris Robinson" <[EMAIL PROTECTED]>
>> >> >>>> >> >> wrote:
>> >> >>>> >> >> > Hey Nick,
>> >> >>>> >> >> >
>> >> >>>> >> >> > this was never completely resolved.  The edited jQuery
>> >> >>>> >> >> > source
>> >> >>>> >> >> > I
>> >> >>>> >> >> > was
>> >> >>>> >> >> > playing
>> >> >>>> >> >> > around with is
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > here:http://www.outsidethediv.com/memory-leak-test/js/jquery-1.2.6-updated.js
>> >> >>>> >> >> >
>> >> >>>> >> >> > You can try swapping your jquery include with it and see
>> >> >>>> >> >> > if
>> >> >>>> >> >> > that
>> >> >>>> >> >> > helps
>> >> >>>> >> >> > at
>> >> >>>> >> >> > all.  It seemed to help out a good deal in my case but was
>> >> >>>> >> >> > rather
>> >> >>>> >> >> > inconclusive in smaller stripped down tests.
>> >> >>>> >> >> >
>> >> >>>> >> >> > On Tue, Nov 25, 2008 at 9:30 AM, Nick <[EMAIL PROTECTED]>
>> >> >>>> >> >> > wrote:
>> >> >>>> >> >> >
>> >> >>>> >> >> > > I am having a very similar problem.  Can someone give
>> >> >>>> >> >> > > more
>> >> >>>> >> >> > > details
>> >> >>>> >> >> > > as
>> >> >>>> >> >> > > how to modify the JQ source file to fix this?
>> >> >>>> >> >> >
>> >> >>>> >> >> > > I have noticed (in Drip) that when I refresh the page,
>> >> >>>> >> >> > > the
>> >> >>>> >> >> > > DOM
>> >> >>>> >> >> > > nodes
>> >> >>>> >> >> > > duplicate.  This doesn't make any sense to me since I
>> >> >>>> >> >> > > know
>> >> >>>> >> >> > > JQ
>> >> >>>> >> >> > > unbinds
>> >> >>>> >> >> > > everything on page unload in IE.  This node duplication
>> >> >>>> >> >> > > is
>> >> >>>> >> >> > > leading
>> >> >>>> >> >> > > to
>> >> >>>> >> >> > > some serious memory issues in my app that needs to run
>> >> >>>> >> >> > > for
>> >> >>>> >> >> > > up
>> >> >>>> >> >> > > to 8
>> >> >>>> >> >> > > hours straight without a browser restart.
>> >> >>>> >> >> >
>> >> >>>> >> >> > > Any help would be much appreciated.
>> >> >>>> >> >> >
>> >> >>>> >> >> > > Thanks,
>> >> >>>> >> >> > > Nick
>> >> >>>> >> >> >
>> >> >>>> >> >> > > On Oct 24, 12:50 pm, chris robinson <[EMAIL PROTECTED]>
>> >> >>>> >> >> > > wrote:
>> >> >>>> >> >> > > > 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 articlehttp://
>> >> >>>> >> >> > >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
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >>
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > >
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> --
>> >> >>>> >> Ariel Flesler
>> >> >>>> >> http://flesler.blogspot.com
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > >
>> >> >>>> >
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> --
>> >> >>>> Ariel Flesler
>> >> >>>> http://flesler.blogspot.com
>> >> >>>>
>> >> >>>>
>> >> >>>
>> >> >>
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> > >
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Ariel Flesler
>> >> http://flesler.blogspot.com
>> >>
>> >>
>> >
>> >
>> > >
>> >
>>
>>
>>
>> --
>> Ariel Flesler
>> http://flesler.blogspot.com
>>
>>
>
>
> >
>



-- 
Ariel Flesler
http://flesler.blogspot.com

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to