From 2e461eb314fcb4962a14f6f70cd473dc5157670f Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Thu, 30 Nov 2023 10:14:23 +0000 Subject: [PATCH] chore: remove redundant hydration code (#9698) --- .changeset/sour-forks-stare.md | 5 +++++ packages/svelte/src/internal/client/hydration.js | 12 +++++++++--- packages/svelte/src/internal/client/render.js | 13 ++++++------- 3 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 .changeset/sour-forks-stare.md diff --git a/.changeset/sour-forks-stare.md b/.changeset/sour-forks-stare.md new file mode 100644 index 0000000000..7bdd4433c4 --- /dev/null +++ b/.changeset/sour-forks-stare.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: remove redundant hydration code diff --git a/packages/svelte/src/internal/client/hydration.js b/packages/svelte/src/internal/client/hydration.js index dfd850c967..ea7eac73f4 100644 --- a/packages/svelte/src/internal/client/hydration.js +++ b/packages/svelte/src/internal/client/hydration.js @@ -1,5 +1,7 @@ // Handle hydration +import { schedule_task } from './runtime'; + /** @type {null | Array} */ export let current_hydration_fragment = null; @@ -68,12 +70,16 @@ export function hydrate_block_anchor(anchor_node, is_controlled) { let fragment = target_node.$$fragment; if (fragment === undefined) { fragment = get_hydration_fragment(target_node); - // @ts-ignore remove to prevent memory leaks - target_node.$$fragment = undefined; + } else { + schedule_task(() => { + // @ts-expect-error clean up memory + target_node.$$fragment = undefined; + }); } set_current_hydration_fragment(fragment); } else { - set_current_hydration_fragment([/** @type {Element} */ (target_node.firstChild)]); + const first_child = /** @type {Element | null} */ (target_node.firstChild); + set_current_hydration_fragment(first_child === null ? [] : [first_child]); } } } diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 21390fa4e0..79a891acd6 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -61,8 +61,7 @@ import { push, current_component_context, pop, - schedule_task, - managed_render_effect + schedule_task } from './runtime.js'; import { current_hydration_fragment, @@ -211,8 +210,10 @@ function close_template(dom, is_fragment, anchor) { ? dom : /** @type {import('./types.js').TemplateNode[]} */ (Array.from(dom.childNodes)) : dom; - if (anchor !== null && current_hydration_fragment === null) { - insert(current, null, anchor); + if (anchor !== null) { + if (current_hydration_fragment === null) { + insert(current, null, anchor); + } } block.d = current; } @@ -1396,9 +1397,7 @@ function if_block(anchor_node, condition_fn, consequent_fn, alternate_fn) { } else if (current_hydration_fragment !== null) { const comment_text = /** @type {Comment} */ (current_hydration_fragment?.[0])?.data; if ( - (!comment_text && - // Can happen when a svelte:element that is turned into a void element has an if block inside - current_hydration_fragment[0] !== null) || + !comment_text || (comment_text === 'ssr:if:true' && !result) || (comment_text === 'ssr:if:false' && result) ) {