A user account is required in order to edit this wiki, but we've had to disable public user registrations due to spam.
To request an account, ask an autoconfirmed user on Chat (such as one of these permanent autoconfirmed members).
Modifications
Modification listeners are going to replace mutation events.
Invoking Modification Listeners
There are two candidate solutions for when the modification listener is to be invoked:
- Directly after the modification.
- At the end of the current task.
For a piece of JavaScript code such as (which is run as one task for the purposes of this example):
node.appendChild(newChild) node.appendChild(newChild) somethingelse()
... approach 1 means the listener is dispatched twice just before the appendChild() method returns and approach 2 means the listener is dispatched after somethingelse() has completed.
PRO 1: It works almost identical to mutation events, without the issue the latter presents to UA implementors.
PRO 2: More changes are batched.
Mutation listeners only have to operate on the final state rather than each intermediary state.
CON 1: If the script running on the page and the script handling the modification listeners are highly decoupled they might present problems for each other similar to how mutation events present issues to UA implementors.
CON 2: Different model from how mutation events work today.
If a task groups modifications and showModalDialog() (what about <dialog modal>?) this creates trouble.
Old
Options:
- Immediately: i.e. while the operation is underway. [Note: This is how current DOM Mutation events work].
- After modifications: Upon completion of the "outer-most" DOM operation. i.e. Immediately before a the lowest-on-the-stack DOM operation returns, but after it has done all of its work.
- End of current task: i.e. immediately before the UA is about to fetch a new Task to run.
- New task: i.e. fully async.
Immediately | After modifications | End of current task | New task | |
---|---|---|---|---|
Pro |
|
|
|
|
Con | Because mutations must be delivered for some DOM operations before the operation is complete, UAs must tolerate all ways in which script may invalidate their assumptions before they do further work. |
|
|
It's too late. Most use cases for mutation observation require that observers run before a paint occurs. E.g. a widget library which
watches for special attributes. Script may create a and an observer will react to this by decorating the div as a FooButton. It is unacceptable (creates visual artifacts/flickering) to have the div be painted before the widget library has decorated it as a FooButton.
Both of these options appear to be non-starters. Option 1 has been shown by experience to be an unreasonable implementation burden for UAs. Option 4 clearly doesn't handle properly important use cases. |