Преглед изворни кода

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.
edison пре 3 месеци
родитељ
комит
289760ec65

+ 3 - 0
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,

+ 4 - 0
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
   }