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
[EMAIL PROTECTED]
http://hsivonen.iki.fi/



Reply via email to