On Fri, Feb 14, 2014 at 10:50 AM, Dimitri Glazkov <dglaz...@google.com> wrote: > > > > On Fri, Feb 14, 2014 at 10:36 AM, Jonas Sicking <jo...@sicking.cc> wrote: >> >> On Fri, Feb 14, 2014 at 9:25 AM, Dimitri Glazkov <dglaz...@google.com> >> wrote: >> > On Thu, Feb 13, 2014 at 6:50 PM, Jonas Sicking <jo...@sicking.cc> wrote: >> >> >> >> Dimitri, I'd still love to hear feedback from you on the idea above. >> >> Seems like it could fix one of the design issues that a lot of people >> >> have reacted to. >> > >> > >> > I am not sure I fully understand how this will work. Let me try to >> > repeat it >> > back and see if I got this right. >> > >> > Basically, we are modifying the tree construction algorithm to be a >> > 3-pass >> > system: >> > >> > 1) Build a meta tree (each node in the tree is a meta object that >> > represents >> > an element that will be constructed) >> > 2) Instantiate all elements by calling constructors on them >> > 3) Build the tree of elements from the meta tree. >> > >> > Right? >> >> I'd rather put it as: >> >> 1) Construct the objects, but rather than inserting them in their >> parents, remember which parent they should be inserted in. > > Sure, this is the meta tree construction. At the limit, if every element is > a custom element, then you're effectively building a tree of things that > remember where their respective elements need to be.
I don't think that you need a tree of "things". What you need is an array of objects that need to be inserted, and an array of parents that they need to insert them into. That's it. >> So no need to construct any meta objects. > > Okay, we don't have to call them meta objects, but we need some storage to > remember where the element should go :) Sure. You'll need two arrays. Or really, you'll need one array of node+parent tuples. >> You can further optimize by only doing this for custom elements with a >> constructor. > > Interesting. What if the element's constructor decides to walk the DOM tree > or mutate it? What does it see? Are there holes for elements that haven't > yet been inserted, or are the elements just appended regardless of their > initial position in the tree? What I mean is that for nodes that doesn't have a constructor, and whose parent doesn't have a constructor, no need to add them to the above arrays. Just insert them into their parent. That means that when that the constructor of an element runs, the element doesn't have any parents or children. So no need to hide parents or children anywhere. / Jonas