Skip to content

Commit 639fc0b

Browse files
committed
chore: add comments
1 parent 87d1e5f commit 639fc0b

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

packages/compiler-core/src/transforms/cacheStatic.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ function walk(
219219
// #6978, #7138, #7114
220220
// a cached children array inside v-for can caused HMR errors since
221221
// it might be mutated when mounting the first item
222+
// #13221
223+
// fix memory leak in cached array:
224+
// cached vnodes get replaced by cloned ones during mountChildren,
225+
// which bind DOM elements. These DOM references persist after unmount,
226+
// preventing garbage collection. Array spread avoids mutating cached
227+
// array, preventing memory leaks.
222228
exp.needArraySpread = true
223229
return exp
224230
}

packages/runtime-core/src/vnode.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -680,9 +680,7 @@ export function cloneVNode<T, U>(
680680
scopeId: vnode.scopeId,
681681
slotScopeIds: vnode.slotScopeIds,
682682
children:
683-
// if vnode is cached, deep clone it's children to prevent cached children
684-
// from retaining detached DOM nodes
685-
patchFlag === PatchFlags.CACHED && isArray(children)
683+
__DEV__ && patchFlag === PatchFlags.CACHED && isArray(children)
686684
? (children as VNode[]).map(deepCloneVNode)
687685
: children,
688686
target: vnode.target,
@@ -740,7 +738,7 @@ export function cloneVNode<T, U>(
740738
}
741739

742740
/**
743-
* for HMR of hoisted vnodes reused in v-for
741+
* Dev only, for HMR of hoisted vnodes reused in v-for
744742
* https://github.com/vitejs/vite/issues/2022
745743
*/
746744
function deepCloneVNode(vnode: VNode): VNode {

0 commit comments

Comments
 (0)