- From: François REMY <fremycompany_pub@yahoo.fr>
- Date: Sun, 7 Jun 2009 14:33:37 +0200
- To: "Sean Hogan" <shogun70@westnet.com.au>, "Boris Zbarsky" <bzbarsky@MIT.EDU>
- Cc: <www-dom@w3.org>
- Message-ID: <C0D9EF8BC34C4E4BB39ECD91EDB99C54@FREMYCOMPANY>
From: "Sean Hogan" <shogun70@westnet.com.au>
Sent: Sunday, June 07, 2009 2:01 PM
To: "Boris Zbarsky" <bzbarsky@MIT.EDU>
Cc: <www-dom@w3.org>
Subject: Re: Mutation events - slowness examples
> It's only huge if it noticeably affects the UX.
> This example arguably proves that it does not: 1024 DOMNodeInserted events and it's only just on the threshold of user awareness - 100ms.
> And this test doesn't even include the time for rendering - I've done some primitive testing and for a smaller number of inserted nodes (say 100) the rendering takes longer than the event dispatch.
I agree with you here.
>> The main issues for me with the current spec from my point of view are
>> not the perf issues when you do use mutation events, necessarily, but
>> the performance impact on the no-event case forced by possible
>> synchronous firing of events, the complexity of not introducing
>> security
>> bugs while implementing mutation events, and the fact that mutation
>> events aren't as useful as a non-reentrant system could be. There are
>> plenty of other things a web page can already do to fall into "slow
>> case" paths in rendering and scripting engines, and some of these are
>> more widespread than mutation listeners...
>>
> Agreed. I guess by current spec I mean using DOM Events as opposed to
> some new handling scheme. But couldn't we just change the spec so that
> Mutation Events are asynchronous?
>
> Is anyone relying on them being synchronous?
Yes, they should be synchronous.
If they're not we can have something like that:
Thread 1
Event Thread 1
Event Thread 2
Attribute X changed to '1'
Start running the listeners
Attribute X changed to ‘2’
Start running the listeners
The value is ‘2’
The value is ‘2’
==> The value '1' was never trapt by the handlers
==> The value '2' was trapt 2 times
==> If the handler modify the value of X, you will have an infinite number of threads opened (each modification invokes a new thread for the event handling, which invoke a modification, which invokes a new thread for the event handling, ...); if you maintain all these operations in one thread, you'll be able to stop the infinite loop because the stack will become too great.
Regards,
Fremy
Received on Sunday, 7 June 2009 12:34:10 UTC