[Wow, wasn't expecting such a barrage of (great) responses!  (I get
this list in digest mode, so find myself scrambling to catch up
here.)]

Regarding performance stats: I've just posted some test data over on
my blog...

http://www.broofa.com/blog/2009/03/prototype-bind-performance

Basically, it looks like my proposed implementation is 2-3X faster
than Prototype's current solution (stable or trunk).  I'm pretty sure
the improvement comes from minimizing the number of function calls
required (by inlining the marshalling of the args array).

@tobie: sorry, my tests don't show much improvement in the trunk
version performance.  Again, the problem is that it's making several
function calls, and those are relatively expensive compared to the
other operations

@ryan: I see your point about inlining the bind pattern, and I do on
occasion do that, however I've always thought much as kangax does: bind
() provides a consistent, minimal closure for a function, whereas
inlining you get a much more cluttered closure. (i.e. it seems like
bind() is less susceptible to memory leaks.  But maybe I'm wrong
there?  (Note, too, that "self" may not be such a good name for your
local reference to 'this'.  https://developer.mozilla.org/en/DOM/window.self
.  I usually do "var me = this;" instead.)

@T.J. Crowder - re: unbind() behavior.  Yeah, perhaps a different name
would be more appropriate, but I have a hard time thinking of a
legitimate use for unbinging other than to debug something.  The 99%
use case for this (I believe) is to do something like,
"myCallback.unbind().toString()" to see what the original method
implementation looks like so you can tell where a callback or event
handler originally came from.  At least, that was my rational for the
name/behavior in my example.

@kangax, re: use of $A, shift, apply - Sure, there's room for other
performance tweaks, but what I care most about is the performance of
invoking a bound function, not in the construction of a bound
function.  This is why the function that I return in my implementation
inlines everything except the one apply() call.  I suspect the code
you refer to (at the bottom of bug #215) would benefit from the
strategy I use to recycle the args array and marshal the bound args
and passed in arguments together as part of the inline code.

@Prototype Team: Any suggested next steps with this?  (If any?)

Thanks for all the great feedback.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" 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/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to