W3C home > Mailing lists > Public > www-dom@w3.org > April to June 2009

Fwd: Use cases for Mutation Events

From: Charles McCathieNevile <chaals@opera.com>
Date: Sun, 07 Jun 2009 18:11:17 +0200
To: "DOM public list" <www-dom@w3.org>
Message-ID: <op.uu5wk3e4wxe0ny@widsith.local>
Hi, this is a collection of stuff from the webapps list...

------- Forwarded message -------
From: "Mike Wilson" <mikewse@hotmail.com>
To: "'Sergey Ilinsky'" <castonet@yahoo.co.uk>
Cc: "'Webapps WG'" <public-webapps@w3.org>
Subject: RE: [DOM3Events] Use cases for Mutation Events
Date: Sat, 06 Jun 2009 01:35:44 +0200

The below use-cases overlap with what other people have already
mentioned but I reiterate them anyway as there might be some
slightly different twist to them:

Keeping updated statistics of page DOM
--------------------------------------
The most popular examples of these today are probably selector
engine libraries. They can benefit from scanning the DOM tree
once into a cache, and then let the cache be updated/invalidated
based on mutation events. Now hopefully querySelectorAll()
support will void this particular usage, but there will always
be other uses needing to do similar things, be it keeping an
updated count of text length or doing something selector based
not supported by QSA, f ex reverse selector mapping.

Widgetify dynamically created markup
------------------------------------
Widgets may be used to override or decorate page markup
cooperatively (the markup knows about it and uses special tagging
to trigger it) or silently (a page script looks for patterns in
the markup to direct widget creation at).
Usually this is done as a page-wide search-and-replace at page
load.
Though, when markup is created dynamically throughout the page's
lifetime, f ex through click events that "expand a pane", it is
hard to do the silent/uncooperative replacement. Mutation events
let us solve this and trigger widget creation when any new
matching markup appears.

===
>>> Sergey had written (at the start of the thread)
>>>> Other thoughts:
>>>> 1) If I am the author to the scripts that modify document, then I am
>>>> indeed aware of what gets changed. If I am not the author, I shall  
>>>> then not
>>>> have been notified on the change. The use cases such as "debugger" do  
>>>> not
>>>> count here - it would be possible to offer required APIs (such as DOM
>>>> Mutation Events) to them only, without needing the API to populate on  
>>>> the
>>>> page. And this is not a sucrifice to run page 50% slower caused by the
>>>> Mutation Events turned on on behalf of a debugger, right?
>>>
>> João replied
>>> Use cases:
>>>  - user triggered input, like when using contentEditable/designMode
> (Jonas intervened)
>> We should fix this by adding better events for user input into
>> contentEditable/designMode. Using mutation events for this is both
>> unnecessarily hard to use (I'd imagine), as well as unperformant (for
>> sure).

> I agree 100% that we need better events for user input in this regard,
> but we don't have them currently and Gecko and Webkit dispatch mutation
> events for user input on editable documents, and I know of a few high
> profile project that use them (although I can't disclose which).

>>>  - 3rd party libraries which want to know if the document mutates out  
>>> of
>>> their context
>>>  - 3rd party scripts (like ad scripts, or link to social networking or
>>> sharing sites) that change the document and the document wants to keep  
>>> some
>>> sanity in it
on which he expanded:

Whether there are libraries that use them or not, I honestly can't tell.
However there are scenarios where 3rd party libraries like jQuery or
prototype might require to know if the document has mutated to update
their internal data structures.
For the 3rd party scripts, it's quite common for sites to deploy 3rd
party scripts that embed links to social networking sites, bookmarking
services, embedding ads, embedding videos, etc. If somehow the script
breaks the main page's tree, a mutation event could help, although in
these cases, probably the load events would be good enough.

=====
and in reply to
> On Jun 4, 2009, at 12:17 , Jonas Sicking wrote:
> I generally agree, and I think that had mutation events never been
> implemented (I'm looking at you Hyatt) the world would probably not
> have missed them very much.

Robin Berjon replied...

More to the point, if browsers would give us XBL2 mutation events would be  
a whole lot less needed. (Yes Jonas, you know at whom I'm looking).

One thing that mutation events were used a lot for back in the old days of  
ASV (that supported them early on, IIRC in v3) was to add behaviour  
through decoration. Basically you could add a foo:draggable="true" on an  
element and know that a JS library would detect that change and make your  
element draggable. It's the poor man's XBL really.

=====

Sergey Ilinsky wrote:
> Hi,
>
> For me it is not clear at all what are the use cases for DOM
> Mutations Events on web pages (so maybe simply dropping their
> implementation would be an option?).
>
> If the group could first identify the use cases for Mutation
> Events on the web pages, then:
> a) it would become clear to everyone whether the progress is needed
> b) creating proposals on progress would become easier, a
> proposal would have to satisfy these use case to prove its viability
>
> Other thoughts:
> 1) If I am the author to the scripts that modify document,
> then I am indeed aware of what gets changed. If I am not the
> author, I shall then not have been notified on the change.
> The use cases such as "debugger" do not count here - it would
> be possible to offer required APIs (such as DOM Mutation
> Events) to them only, without needing the API to populate on
> the page. And this is not a sucrifice to run page 50% slower
> caused by the Mutation Events turned on on behalf of a
> debugger, right?
>
> 2) I can see Mutation Events as the extension point that
> enables implementation of the technologies that are not
> available in the browser. However this is not a "normal"
> usecase that web browsers are here to face.
>
> Sergey/



-- 
Charles McCathieNevile  Opera Software, Standards Group
     je parle français -- hablo español -- jeg lærer norsk
http://my.opera.com/chaals       Try Opera: http://www.opera.com
Received on Sunday, 7 June 2009 16:11:55 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 22 June 2012 06:14:00 GMT