W3C home > Mailing lists > Public > public-webapi@w3.org > April 2008

Re: [Element Traversal LC] access to element by index

From: Henri Sivonen <hsivonen@iki.fi>
Date: Wed, 2 Apr 2008 16:50:39 +0300
Cc: Jonas Sicking <jonas@sicking.cc>, Boris Zbarsky <bzbarsky@mit.edu>
Message-Id: <2E847BD0-E4E7-490C-8156-AF0A4049B6DE@iki.fi>
To: "Web APIs WG (public)" <public-webapi@w3.org>

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 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 2 April 2008 13:51:27 GMT