improve performance for class-only changes; improves #40 but doesn't fix the real underlying combinatorial explosion

This commit is contained in:
Andreas Rumpf 2017-10-31 09:40:52 +01:00
commit 0ddf6098f7
2 changed files with 6 additions and 5 deletions

View file

@ -93,7 +93,7 @@ when defined(js):
n[0] = ident("inner" & nn) n[0] = ident("inner" & nn)
var unpackCall = newCall(n[0]) var unpackCall = newCall(n[0])
var counter = 0 var counter = 0
for i in 1.. <params.len: for i in 1 ..< params.len:
let param = params[i] let param = params[i]
let L = param.len let L = param.len
let typ = param[L-2] let typ = param[L-2]

View file

@ -245,10 +245,10 @@ proc eq(a, b: VNode): EqResult =
when defined(profileKarax): inc reasons[deComponent] when defined(profileKarax): inc reasons[deComponent]
return different return different
return componentsIdentical return componentsIdentical
if a.class != b.class: #if:
when defined(profileKarax): inc reasons[deClass] # when defined(profileKarax): inc reasons[deClass]
return different # return different
if not eq(a.style, b.style) or not sameAttrs(a, b): if a.class != b.class or not eq(a.style, b.style) or not sameAttrs(a, b):
when defined(profileKarax): inc reasons[deSimilar] when defined(profileKarax): inc reasons[deSimilar]
return similar return similar
# Do not test event listeners here! # Do not test event listeners here!
@ -260,6 +260,7 @@ proc updateStyles(newNode, oldNode: VNode) =
if newNode.style != nil: applyStyle(oldNode.dom, newNode.style) if newNode.style != nil: applyStyle(oldNode.dom, newNode.style)
else: oldNode.dom.style = Style() else: oldNode.dom.style = Style()
oldNode.style = newNode.style oldNode.style = newNode.style
oldNode.class = newNode.class
proc updateAttributes(newNode, oldNode: VNode) = proc updateAttributes(newNode, oldNode: VNode) =
# we keep the oldNode, but take over the attributes from the new node: # we keep the oldNode, but take over the attributes from the new node: