feat: improve static content stringiciation

Now a single static vnode can contain stringified content
for multiple consecutive nodes, which greatly improves the
coverage of this optimization.
This commit is contained in:
Evan You
2020-05-16 21:30:16 -04:00
parent 59d50dad9c
commit d965bb6227
2 changed files with 27 additions and 4 deletions

View File

@@ -43,6 +43,7 @@ function walk(
resultCache: Map<TemplateChildNode, boolean>,
doNotHoistNode: boolean = false
) {
let hasHoistedNode = false
for (let i = 0; i < children.length; i++) {
const child = children[i]
// only plain elements & text calls are eligible for hoisting.
@@ -55,6 +56,7 @@ function walk(
;(child.codegenNode as VNodeCall).patchFlag =
PatchFlags.HOISTED + (__DEV__ ? ` /* HOISTED */` : ``)
child.codegenNode = context.hoist(child.codegenNode!)
hasHoistedNode = true
continue
} else {
// node may contain dynamic children, but its props may be eligible for
@@ -81,6 +83,7 @@ function walk(
isStaticNode(child.content, resultCache)
) {
child.codegenNode = context.hoist(child.codegenNode)
hasHoistedNode = true
}
// walk further
@@ -98,7 +101,7 @@ function walk(
}
}
if (context.transformHoist) {
if (hasHoistedNode && context.transformHoist) {
context.transformHoist(children, context)
}
}