- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Sat, 06 Jun 2009 21:11:36 -0400
- To: Sean Hogan <shogun70@westnet.com.au>
- CC: www-dom@w3.org
Sean Hogan wrote: > Interesting. I may not be reading these results correctly - could you confirm these ratios: > - no listeners: 1x > - a DOMNodeInserted listener on the event chain: 2x (not counting listener execution time) This is correct, in a current trunk Firefox build, on this particular testcase. The ratio was much higher in Opera and Chrome. > - a DOMNodeInserted listener NOT on the event chain: 1.5x Not quite; see below. > That doesn't seem so bad. It does to me, for several reasons: 1) The "no listeners" part will keep getting smaller; as you can see by comparing to Chrome and Opera, Firefox could improve this part quite a bit. 2) The testcase has a very shallow DOM. The "no listeners" part doesn't really depend on DOM depth much. Event dispatch is O(N) in depth of DOM, pretty much by definition. 3) Even a 2x slowdown (or heck, even 1.5x) is huge. > If the 1.5x for the last case could be optimized to 1.1x then I would say just stick with the current spec. 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... Those whose concern are the in-page impact of actually using a mutation listener should feel free to post their own thoughts on the numbers here, of course. > Can the dispatch algorithm check for listeners while building the event target chain and abort if there aren't any? It already does in Gecko, which is why in practice the overhead for the "mutation listener not on parent chain" case is not quite the 1.5x cited above. It'd still be O(N) in depth of DOM, of course. -Boris
Received on Sunday, 7 June 2009 01:12:21 UTC