W3C home > Mailing lists > Public > www-style@w3.org > January 2009

Re: Proposal for limited :matches pseudoclass

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Tue, 20 Jan 2009 12:22:11 -0500
Message-ID: <49760843.20409@mit.edu>
To: François REMY <fremycompany_pub@yahoo.fr>
CC: Eduard Pascual <herenvardo@gmail.com>, CSS 3 W3C Group <www-style@w3.org>

François REMY wrote:
> From: "Eduard Pascual" <herenvardo@gmail.com>
>> It appears to me (please, someone correct me if I am wrong) that the
>> main concern applies to page-loading, rather than arbitrary
>> modifications from script

The concerns apply to some of both, actually.  UAs currently make 
various attempts to optimize behavior in the face of post-load DOM 
modifications too (possibly with fallback to "just give up and recompute 
it all" in some cases).

 >> so something like a full :matches wouldn't
>> really hurt: scripts can anyway tweak the class or id of the root
>> element.

While true, right now toggling the class on some non-root node is a lot 
faster than toggling it on the root.  The simplest general :matches() 
implementation would make any DOM mutation (any attribute change, node 
insertion, node removal, etc) just as costly as changing the class of 
the root.  There are some obvious optimizations there (e.g. checking for 
attributes that are actually selected on), but DOM modification in 
general will get slower, or there will be a good bit of complexity, with 
a general :matches.

Now maybe the complexity is worth it, of course.  But in practice 
complexity means you pay either performance or memory or both; that will 
be the real cost from the point of view of web pages.

>> Actually, if authors try to rely on javascript emulation of
>> the :matches capability, the impact is even greater

While true, it only affects the authors who want to be affected.  Of 
course one could have optimizations based on whether anything on the 
page uses :matches...  But then adding a single CSS selector will 
inexplicably degrade your DOM performance.  You get that somewhat now 
with :nth-of-type and company, but only in the affected subtrees.

>> - If the blocks containing ":matches" on their selectors were ignored
>> during initial page loading, would the concerns still be there?

Yes.

>> - Would it be actually doable to skip such blocks during the initial
>> loading, and "review" them once the page has been loaded?

Possibly, but that doesn't seem very desirable (esp. given the number of 
pages out there that never finish loading).

> My thought is that the ‘normal way’ can be as fast as the 
> ‘reversed way’, and can be simpler to implements.

I welcome actual data to this effect.  I'd even welcome a theoretical 
argument past "that's my gut feeling".  I believe such theoretical 
arguments against this claim were already presented, but if not I'm 
happy to do so.  Can't present data, since that would involve actually 
having a "normal" (in your terminology) matching implementation.

> Complaining about speed problems is a 
> false argument since editing the class of the root element also can 
> change the whole DOM.

But in this case the web page authors _expects_ it to.  The problem is 
slowness that the web page author doesn't want.  If he's just having a 
little ticker off in the corner, he doesn't expect each tick to cost the 
same as rebuilding the entire presentation.  Nor should it.

-Boris
Received on Tuesday, 20 January 2009 17:27:29 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:15 GMT