I wonder if the following strategy would work to address this... 1. Bring back some form of general purpose keyed identifier for virtual DOM nodes.
2. Before diffing two virtual DOM trees, build a map from keys to DOM nodes for such keyed nodes. When processing a reference to a node in the result, if it has a key, prefer to use the entry in this map. (Multiple uses of the same id need to have some logic to keep things from blowing up but we could reasonably lose the optimization for all but the "first" use of an id.) Challenges: * Will this actually work well with the real DOM or will removal and reinsertion cause problems? * This is essentially based on doing full scans of the tree and I assume there are optimizations around subtrees that haven't changed. Those subtrees would at least need to be scanned to continue their claim on DOM nodes with identifiers. But if this works, then the fix for a text node or web component getting its state whacked would be to give it an identifier. For lists, the new keyed support is great and probably more efficient than what we had before. But for creating "identity" for view nodes, it probably isn't what is needed and what was there before while better was not really fully sufficient either. Mark P.S. There is also a related problem for external components with not getting new components when we want them. Identifiers would fix that as well. P.P.S. This same work could also conceivably enable some form of DOM node recycling. I think I recall that being part of the set of tricks that Google Maps used to wow people on performance when it first launched and it's part of what Apple's UITableView does to get performance in native lists. > On Sep 24, 2016, at 8:27 AM, Richard Feldman <[email protected]> > wrote: > > Yep, very true. I would love for there to be a better solution for text > fields in particular. > > -- > You received this message because you are subscribed to the Google Groups > "Elm Discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
