Re: [css-selectors] :contains()

On 4/25/12 6:09 PM, Sebastian Zartner wrote:
> But isn't that something, which
> should in most cases be done within milliseconds?

The real question is how often you have to do it.  Doing it once is ms 
(or likely even faster).  Doing it thousands or tends of thousands of 
times a second, as the page mutates its DOM, is where the problem comes up.

> Also I assume defining the subject of a selector doesn't cost any
> additional performance because it's just marking, which element(s)
> inside the selector should be styled.
> So having 'OL! > LI:only-child' (as from the spec) would first find all
> <li>s, which are the only child of a <ol> and mark the <ol> for styling
> at the same time.

Again, it matters for dynamic changes.  For example, if I have an <li> 
with no kids and I insert a child, then the selector 'OL! > 
LI:only-child' means I have to recompute style on the parent OL and all 
its descendants.  The selector 'OL! LI:only-child' would require walking 
up the ancestor chain looking for OLs and recomputing the style starting 
that topmost thing found.

And with some of the other proposals people want to combine this with, 
you could end up restyling arbitrary other nodes in the DOM that are far 
away from the 'OL'.

Basically, a UA has three options:

1)  Give up on correctly handling dynamic changes; just accept that 
sometimes styles won't update (already taken by some UAs for the + and ~ 
combinators).

2)  On every change, just restyle the whole document.

3)  On every change, try to figure out what part of the document 
actually needs restyling.

In practice, #1 is not that great, and #2 is very expensive, so UAs want 
to do #3, and the cost of _that_ goes up with the subject marker.

Again, the subject marker may well be worth it.  Just please don't 
pretend it doesn't cost anything performance-wise: it makes every single 
mutation somewhat slower.

Of course in a non-dynamic context a lot of these concerns are less 
relevant.

-Boris

Received on Wednesday, 25 April 2012 22:24:49 UTC