perf: replace $lastLogicalChild with vfor end anchor

This commit is contained in:
daiwei 2025-09-29 22:10:24 +08:00
parent a4d7e70db8
commit f567f59fe7
1 changed files with 10 additions and 0 deletions

View File

@ -35,6 +35,7 @@ import {
} from './dom/hydration'
import { ForFragment, VaporFragment, findLastChild } from './fragment'
import {
type ChildItem,
insertionAnchor,
insertionParent,
resetInsertionState,
@ -150,6 +151,15 @@ export const createFor = (
if (!parentAnchor || (parentAnchor && !isComment(parentAnchor, ']'))) {
throw new Error(`v-for fragment anchor node was not found.`)
}
// $lastLogicalChild is the fragment start anchor; replacing it with end anchor
// can avoid the call to locateEndAnchor within locateChildByLogicalIndex
if (_insertionParent && _insertionParent!.$lastLogicalChild) {
;(parentAnchor as any as ChildItem).$idx = (
_insertionParent!.$lastLogicalChild as ChildItem
).$idx
_insertionParent.$lastLogicalChild = parentAnchor
}
}
} else {
parent = parent || parentAnchor!.parentNode