-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
feat(vapor): hydration #13226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
edison1105
wants to merge
890
commits into
minor
Choose a base branch
from
edison/feat/vaporHydration
base: minor
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
feat(vapor): hydration #13226
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Compiler Changes
@vue/compiler-ssr
):<!--if-->
,<!--for-->
,<!--slot-->
,<!--dynamic-component-->
,<!--[[-->
,<!--]]-->
) into the server-rendered HTML output. These anchors are essential markers for the client-side hydration process.@vue/compiler-vapor
):transformChildren
to create placeholder nodes (<!>
) in the template string for each dynamic child, facilitating node matching during hydration.Runtime Changes
Hydration-Aware APIs (
@vue/runtime-vapor
):createIf
,createFor
,createDynamicComponent
, andcreateSlot
are now hydration-aware. They use the SSR anchors (identified by labels likeIF_ANCHOR_LABEL
,FOR_ANCHOR_LABEL
, etc.) to locate and reuse corresponding DOM nodes rendered by the server.DOM Traversal (
@vue/runtime-vapor/dom
):Introduced hydration-specific implementations for DOM traversal helpers (
__child
,__next
,__nthChild
). These versions intelligently skip over SSR comment anchors and insignificant text nodes to correctly find the target nodes for hydration.Added
enableHydrationNodeLookup
anddisableHydrationNodeLookup
to switch between standard and hydration-specific traversal logic.see benchmark for
direct function call
vsdelegated function call
benchmark result
Core Runtime (
@vue/runtime-core
):hydration.ts
to recognize and correctly handle the hydration of Vapor components embedded within VDOM components.VDOM Interop (
@vue/runtime-vapor/vdomInterop.ts
):Shared Utilities (
@vue/shared
):domAnchors.ts
defining constants for the various anchor labels (e.g.,IF_ANCHOR_LABEL
,DYNAMIC_START_ANCHOR_LABEL
) and utility functions (isVaporAnchors
,isDynamicAnchor
,isVaporFragmentAnchor
) to identify these special comment nodes.Tests
runtime-vapor/__tests__/hydration.spec.ts
):v-if
,v-for
).slots
and dynamic components (<component :is="...">
).<!--[[-->
,<!--]]-->
).NOTE
The following two PR changes have already been included in this PR
next
,child
andnthChild
before setInsertionState #13057