- From: Henri Sivonen <hsivonen@iki.fi>
- Date: Wed, 2 Apr 2008 16:21:39 +0300
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: Boris Zbarsky <bzbarsky@mit.edu>, "Web APIs WG (public)" <public-webapi@w3.org>
On Apr 2, 2008, at 15:09, Jonas Sicking wrote: > It can be a pain to add IDs to *all* the nodes you ever access. A > pattern i've seen a lot is to have small repeating sections in a > page, and then navigating within that repeated section. That makes sense. >> That said, I don't think there's a problem with having a >> getChildElementByIndexThisIsNotGuaranteedToBeArrayAccess() if you >> really want to get the nth element child only instead of iterating >> with an index. > > Sure, as long as we also > add .firstElementChildThisIsNotGuaranteedToBePropertyAccess ;) Hmm. Somehow I thought it would be a given that nextElementSibling/ firstElementChild wouldn't be direct pointers but convenience getters built on top of nextSibling and firstChild. But I guess an app developer might as well expect the DOM to maintain lots and lots of direct pointers... Anyway, myFooElement.getChildrenByTagName("*")[3] looks like it does something more expensive than myFooElement.childElements[3] even if the implementation were the same, so they give app developers different expectations of performance characteristics. >>> The same argument can be made for .nextElementSibling, why give >>> forward-iterating access into platform structures that are most >>> commonly index-accessed? >> Indeed the argument I made should lead to iterator objects instead >> of either item(n) or nextSibling. >> I think one of the major design flaws of the DOM is that it gives >> two views to the tree without specifying the performance >> characteristics of those views. App developers who like linked >> lists may reasonable assume that nextSibling is a mere pointer >> dereference. App developers who like arrays may reasonably assume >> that item(n) is a mere array access. Now DOM implementations are >> damned either way and have to do tricks to make the non-native view >> fast as well. > > Honestly, is this really a big problem? It used to be that iterating > a child list using .nextSibling was O(N^2). It was a problem for me when I tried to walk the HTML5 spec in Firefox 1.5 using iterative traversal with firstChild/nextSibling/parentNode. Firefox 1.5 performed a *lot* worse than the then-current versions of Opera and Safari. And the spec was a lot smaller back then, too. :-) -- Henri Sivonen hsivonen@iki.fi http://hsivonen.iki.fi/
Received on Wednesday, 2 April 2008 13:22:29 UTC