From: edison Date: Thu, 15 Jan 2026 07:04:48 +0000 (+0800) Subject: refactor(runtime-vapor): improve hydration code treeshaking (#14322) X-Git-Tag: v3.6.0-beta.4~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=289760ec65b85d075ac29cdb7f7b979509f23772;p=thirdparty%2Fvuejs%2Fcore.git refactor(runtime-vapor): improve hydration code treeshaking (#14322) Add `if (!isHydrating) return` guards to hydration methods for better dead code elimination when SSR hydration is unused. --- diff --git a/packages/runtime-vapor/src/components/Teleport.ts b/packages/runtime-vapor/src/components/Teleport.ts index 0e5b26ca17..738766a4e0 100644 --- a/packages/runtime-vapor/src/components/Teleport.ts +++ b/packages/runtime-vapor/src/components/Teleport.ts @@ -264,6 +264,7 @@ export class TeleportFragment extends VaporFragment { } private hydrateDisabledTeleport(targetNode: Node | null): void { + if (!isHydrating) return let nextNode = this.placeholder!.nextSibling! setCurrentHydrationNode(nextNode) this.mountAnchor = this.anchor = locateTeleportEndAnchor(nextNode)! @@ -274,6 +275,7 @@ export class TeleportFragment extends VaporFragment { } private mountChildren(target: Node): void { + if (!isHydrating) return target.appendChild((this.targetStart = createTextNode(''))) target.appendChild( (this.mountAnchor = this.targetAnchor = createTextNode('')), @@ -294,6 +296,7 @@ export class TeleportFragment extends VaporFragment { } hydrate = (): void => { + if (!isHydrating) return const target = (this.target = resolveTeleportTarget( this.resolvedProps!, querySelector, diff --git a/packages/runtime-vapor/src/vdomInterop.ts b/packages/runtime-vapor/src/vdomInterop.ts index 4b9e56bb4e..5010d2afd7 100644 --- a/packages/runtime-vapor/src/vdomInterop.ts +++ b/packages/runtime-vapor/src/vdomInterop.ts @@ -223,6 +223,7 @@ const vaporInteropImpl: Omit< ) return _next(node) }, + hydrateSlot(vnode, node) { const { slot } = vnode.vs! const propsRef = (vnode.vs!.ref = shallowRef(vnode.props)) @@ -328,6 +329,7 @@ function mountVNode( } frag.hydrate = () => { + if (!isHydrating) return hydrateVNode(vnode, parentComponent as any) onScopeDispose(unmount, true) isMounted = true @@ -457,6 +459,7 @@ function createVDOMComponent( } frag.hydrate = () => { + if (!isHydrating) return hydrateVNode( vnode, parentComponent as any, @@ -667,6 +670,7 @@ function renderVDOMSlot( } frag.hydrate = () => { + if (!isHydrating) return render() isMounted = true }