Re: [whatwg] Proposal: Adding methods like getElementById and getElementsByTagName to DocumentFragments

Isn't that what the NodeIterator and TreeWalker DOM APIs were for?

Sincerely,
   James Greene
On Jul 27, 2013 12:58 PM, "Ojan Vafai" <ojan@chromium.org> wrote:

> On Thu, Jul 25, 2013 at 1:42 PM, Jonas Sicking <jonas@sicking.cc> wrote:
>
> > On Thu, Jul 25, 2013 at 9:05 AM, Boris Zbarsky <bzbarsky@mit.edu> wrote:
> > > On 7/24/13 10:42 PM, Jussi Kalliokoski wrote:
> > >>
> > >> Argh, I had forgotten about live NodeLists. OK, this is a reason that
> > >> resonates with me and justifies calling these methods obsolete. Too
> bad
> > >> these methods are so badly flawed
> > >
> > >
> > > Fwiw, I think the performance impact of live NodeLists is ... unclear.
> > Their
> > > existence does mean that you have to deal with DOM mutations changing
> the
> > > lists, but them being live also means you can make the list getters
> much
> > > faster in cases when the caller doesn't actually want the entire list.
> >
> > And, as importantly, it also means that for multiple consecutive calls
> > to get the list, say inside of a loop, can return the same result
> > object. I.e. you don't have to re-walk the DOM for every iteration
> > through the loop.
> >
>
> I think these are good points of what is lost by using static NodeLists. I
> still feel pretty strongly though that these benefits don't outweigh the
> costs. If we want to give people most of the benefits of live NodeLists
> without the costs we could expose an iterator API:
>
> var iterator = document.querySelectorAll('div').iterator(); <--- does some
> magic to not precompute the whole list
> while (let current = iterator.next()) { ... }
>
> And next always does the walk from the current node. So, if you add a div
> before the current node, this specific iterator won't hit it, but if you
> add a div after it would. I'm not sure what should happen though if you
> remove the node that's the current node. I think I'm OK with the iterator
> just returning null for the next() call in that case.
>
> This gets the performance benefits of live NodeLists, I think meets the
> main use-cases of not wanting to walk the whole DOM, but doesn't require
> the browser to do a lot of metadata tracking as you go.
>
> Ojan
>

Received on Saturday, 27 July 2013 19:42:09 UTC