perf: skip patch on same vnode

This commit is contained in:
Evan You 2021-07-21 14:04:02 -04:00
parent dd1439e711
commit d13774b881

View File

@ -470,6 +470,10 @@ function baseCreateRenderer(
slotScopeIds = null, slotScopeIds = null,
optimized = __DEV__ && isHmrUpdating ? false : !!n2.dynamicChildren optimized = __DEV__ && isHmrUpdating ? false : !!n2.dynamicChildren
) => { ) => {
if (n1 === n2) {
return
}
// patching & not same type, unmount old tree // patching & not same type, unmount old tree
if (n1 && !isSameVNodeType(n1, n2)) { if (n1 && !isSameVNodeType(n1, n2)) {
anchor = getNextHostNode(n1) anchor = getNextHostNode(n1)
@ -1152,8 +1156,12 @@ function baseCreateRenderer(
const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''))! const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''))!
let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2 let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2
if (dynamicChildren) {
optimized = true if (__DEV__ && isHmrUpdating) {
// HMR updated, force full diff
patchFlag = 0
optimized = false
dynamicChildren = null
} }
// check if this is a slot fragment with :slotted scope ids // check if this is a slot fragment with :slotted scope ids
@ -1163,13 +1171,6 @@ function baseCreateRenderer(
: fragmentSlotScopeIds : fragmentSlotScopeIds
} }
if (__DEV__ && isHmrUpdating) {
// HMR updated, force full diff
patchFlag = 0
optimized = false
dynamicChildren = null
}
if (n1 == null) { if (n1 == null) {
hostInsert(fragmentStartAnchor, container, anchor) hostInsert(fragmentStartAnchor, container, anchor)
hostInsert(fragmentEndAnchor, container, anchor) hostInsert(fragmentEndAnchor, container, anchor)