But If I do getElementsByClass()[0], and LiveNodeList is immediately garbage 
collectable, then if I change the DOM, Blink won't traverse ancestors, thus no 
penalty for DOM mutation?

> On Apr 28, 2015, at 2:28 PM, Elliott Sprehn <espr...@chromium.org> wrote:
> 
> 
> 
> On Mon, Apr 27, 2015 at 11:13 PM, Glen Huang <curvedm...@gmail.com 
> <mailto:curvedm...@gmail.com>> wrote:
> On second thought, if the list returned by getElementsByClass() is lazy 
> populated as Boris says, it shouldn't be a problem. The list is only updated 
> when you access that list again.
> 
> The invalidation is what makes your code slower. Specifically any time you 
> mutate the tree, and you have live node lists, we traverse ancestors to mark 
> them as needing to be updated.
> 
> Blink (and likely other browsers) will eventually garbage collect the 
> LiveNodeList and then your DOM mutations will get faster again.
>  
> 
>> On Apr 28, 2015, at 2:08 PM, Glen Huang <curvedm...@gmail.com 
>> <mailto:curvedm...@gmail.com>> wrote:
>> 
>>> Live node lists make all dom mutation slower
>>> 
>> Haven't thought about this before. Thank you for pointing it out. So if I 
>> use, for example, lots of getElementsByClass() in the code, I'm actually 
>> slowing down all DOM mutating APIs?
> 
> 

Reply via email to