I'm curious as to why you only chose to optimize the selectors in .live().
Why not optimize .is()? or jQuery.filter? Optimizing jQuery.filter would
yield faster results for .filter(), .is(), and .live().

--John


On Mon, Aug 17, 2009 at 1:38 PM, lrbabe <lrb...@gmail.com> wrote:

>
> I've made some minor updates to the code to reduce the code size:
> - it now uses the internal jQuery.nodeName function to check for
> simple selectors involving a node name (which is also safer)
> - it checks for simple selectors before checking for position
> selectors
> The size difference for the minified version between the current
> implementation and this new one should be around 250B
> The code is at the same address: http://gist.github.com/168158
>
> I'm also willing to write on learningjquery.com about the new features
> for event delegation introduced in jQuery 1.3: live and closest
> Who should I contact for that purpose?
>
> Regards,
> Louis-Rémi Babé
>
> On Aug 15, 2:23 am, lrbabe <lrb...@gmail.com> wrote:
> > Thank for your quick answer John,
> >
> > All right, I take the code of the example, remove the part that
> > updates the counter and wraps the rest with a console.profile()
> >
> > 1. With the orginal .closest() implementation:
> > - entering the ul: function calls = 76, time = 1.5 to 2.5 ms
> > - moving from a li to a li.blue: calls = 144, time ~= 3.2ms
> > - moving from a li.blue to a li: calls = 103, time ~= 2.2ms
> > - moving from a li to a green span: calls = 124, time ~= 2.2ms
> > - moving from a green span to a red span: calls = 145, time ~= 3.2ms
> > 2. With the modified .closest() implementation:
> > - entering the ul: function calls = 13, time ~= 0.25ms
> > - moving from a li to a li.blue: calls = 27, time ~= 0.55ms
> > - moving from a li.blue to a li: calls = 13, time ~= 0.25ms
> > - moving from a li to a green span: calls = 13, time ~= 0.3ms
> > - moving from a green span to a red span: calls = 13, time ~= 0.3ms
> >
> > ...and we have only three levels of elements here.
> >
> > On Aug 15, 1:51 am, John Resig <jere...@gmail.com> wrote:
> >
> > > An interesting proposition - although before making a change of this
> > > magnitude it would be good to get some performance numbers outlined so
> that
> > > we know how worthwhile it is.
> >
> > > --John
> >
> > > On Fri, Aug 14, 2009 at 8:33 PM, lrbabe <lrb...@gmail.com> wrote:
> >
> > > > Hi,
> >
> > > > The principle of .closest( selector ) is that it cycles through the
> > > > ancestors of an event target until it finds an element corresponding
> > > > to the event target, or hits the root.
> > > > To check for an element matching the selectors it uses the .is
> > > > ( selector ) function which collects all elements corresponding to
> the
> > > > selector and cycles through them to find if "this" is any of those
> > > > elements.
> >
> > > > If my memories about my algorithm lectures are correct, the
> complexity
> > > > of this algorithm is O(n²). Only in the case of a selector of the
> form
> > > > "#id" we have an O(n) complexity.
> > > > However, there is another range of selectors that could be checked
> > > > with an O(n) algorithm: selectors such as "div", ".class" and
> > > > "div.class". In those cases, .is( selector ) is not needed because we
> > > > can directly check the ancestor's nodeType and className.
> >
> > > > Reducing the complexity of the .closest() function is particularly
> > > > important when using event delegation with the mouseover and mouseout
> > > > events: those events fire really often as the user moves his/her
> > > > mouse, and the function needs to be used twice: one to check the the
> > > > target is in the selector, and one to check that the related target
> is
> > > > in a different ancestor.
> >
> > > > I propose a new implementation of .closest() that is able to detect
> > > > those selectors and use them to "fast-check" ancestors. The last
> > > > parsed selector is cached to further improve the performances (I'm
> > > > just not sure where to cache the parsed selector).
> >
> > > > The code is available as a gist:http://gist.github.com/168158
> > > > and can be tested here:http://www.lrbabe.com/sdoms/closest/
> >
> > > > Together with the recent addition of the "context" parameter
> > > > in .closest(), it makes one of the most efficient event delegation
> > > > helper out there.
> >
> > > > Feedback would be much appreciated,
> >
> > > > Regards,
> > > > lrbabe
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to