-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 1/6/11 4:47 AM, Peter van der Zee wrote:
> Actually there was some discussion on twitter related to this. Jed drew
> a simple conclusion; expando's win in speed from alternative
> methods. http://twitter.com/jedschmidt/status/22784074045198338
> 
> The way I solved the leak pattern at some point was to use the expando
> pattern and store the referenced objects in an array. The object would
> then get a unique property (something like ._id usually suffices, but
> the property name itself is not very important) to point to the correct
> index in the reference array.

So, you would do something like this when attaching the initial event,
right?:

if(typeof elem._id == "undefined"){
    elem._id = generateEventHandlerID();
}

I didn't go into it in the article, but IE has a property on every
created node called `uniqueNumber`:

http://msdn.microsoft.com/en-us/library/ff628957(VS.85).aspx

FuseJS does something similar to what you're doing, but on Internet
Explorer it uses elem.uniqueNumber to keep from having an expando that
would be copied when cloning an element:

https://github.com/jdalton/fusejs/blob/e5c1c4c09ed5fb6ea0e5cb2bbebc3606ae4232f5/src/dom/node.js#L76-109

I've taken the same approach in uber.js.  If you can avoid expandos in
IE, you should.

> This will prevent most leaks right there. In events or wrappers you use
> the $.getId(el._id) method, reference it immediately (or in another
> similar way that you know won't stick and leak) and prevent the leakage
> completely because it's never actually stored in your event/wrapper.
> 
> When time comes and the user navigates away, all you have to do is
> delete the array onbeforeunload and all references will be released at once.

Attaching an `onbeforeunload` handler will break bfcache:

https://developer.mozilla.org/En/Using_Firefox_1.5_caching

If you have a massive application, it would probably be best not to have
to re-initialize (reparse the DOM, etc.) it when navigating back to it.

- -- 
Bryan Forbes
http://www.reigndropsfall.net

GPG Fingerprint
3D7D B728 713A BB7B B8B1  5B61 3888 17E0 70CA 0F3D
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk0mM/cACgkQOIgX4HDKDz2AVwCgwnmR91GTs6+x+gfCzuqGil7m
AhMAn1FxI5QzXN8xGUCVaJdVvrYLkV4W
=LApk
-----END PGP SIGNATURE-----

-- 
To view archived discussions from the original JSMentors Mailman list: 
http://www.mail-archive.com/[email protected]/

To search via a non-Google archive, visit here: 
http://www.mail-archive.com/[email protected]/

To unsubscribe from this group, send email to
[email protected]

Reply via email to