- From: Henri Sivonen <hsivonen@iki.fi>
- Date: Wed, 2 Apr 2008 16:50:39 +0300
- To: "Web APIs WG (public)" <public-webapi@w3.org>
- Cc: Jonas Sicking <jonas@sicking.cc>, Boris Zbarsky <bzbarsky@mit.edu>
On Apr 2, 2008, at 16:21, Henri Sivonen wrote:
> 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. :-)
It turns out that I still have the test case around:
http://hsivonen.iki.fi/test/dom-walk-perf.html
I think it is perfectly reasonable to expect this algorithm to be the
fast way to walk when you see a tree with first child, sibling and
parent references:
function walk(node) {
var current = node;
var next = null;
for (;;) {
if (next = current.firstChild) {
current = next;
continue;
}
break;
for (;;) {
if (next = current.nextSibling) {
current = next;
break;
}
current = current.parentNode;
if (current == node) {
return;
}
}
}
}
With Element Traversal, I think it would be reasonable to expect the
above algorithm to be the fast way to walk the elements when s/
firstChild/firstElementChild/ and s/nextSibling/nextElementSibling/.
--
Henri Sivonen
hsivonen@iki.fi
http://hsivonen.iki.fi/
Received on Wednesday, 2 April 2008 13:51:26 UTC