From a0911b475ed45200259b34988ff6658edd17dcbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 13 Aug 2025 16:29:26 +0200 Subject: [PATCH 1/3] wip --- src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts index b86ff3bd8d03..8ac39db8b26f 100644 --- a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts +++ b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts @@ -308,6 +308,11 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { return UpdateCost.Infinite; } + // Always treat "preloads" as new elements. + if ((b as Element).tagName === 'LINK' && (b as Element).attributes.getNamedItem('rel')?.value === 'preload') { + return UpdateCost.Infinite; + } + return UpdateCost.None; case Node.DOCUMENT_TYPE_NODE: // It's invalid to insert or delete doctype, and we have no use case for doing that. So just skip such From 7efce5d6411a312ac2889e820268aca1b18b6280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 13 Aug 2025 19:56:15 +0200 Subject: [PATCH 2/3] Update DomSync.ts --- src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts index 8ac39db8b26f..7617c8b3a2f8 100644 --- a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts +++ b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts @@ -309,7 +309,7 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { } // Always treat "preloads" as new elements. - if ((b as Element).tagName === 'LINK' && (b as Element).attributes.getNamedItem('rel')?.value === 'preload') { + if (isPreloadElement(a as Element) || isPreloadElement(b as Element)) { return UpdateCost.Infinite; } @@ -324,6 +324,10 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { } } +function isPreloadElement(el: Element): bool { + return el.tagName === 'LINK' && el.attributes.getNamedItem('rel')?.value === 'preload'; +} + function upgradeComponentCommentsToLogicalRootComments(root: Node): ComponentDescriptor[] { const serverDescriptors = discoverComponents(root, 'server') as ServerComponentDescriptor[]; const webAssemblyDescriptors = discoverComponents(root, 'webassembly') as WebAssemblyComponentDescriptor[]; From 3a5550b0ed4836f8bd0da7915528dca197e40d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Wed, 13 Aug 2025 20:43:53 +0200 Subject: [PATCH 3/3] Update DomSync.ts --- src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts index 7617c8b3a2f8..2707f3755a63 100644 --- a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts +++ b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts @@ -324,7 +324,7 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { } } -function isPreloadElement(el: Element): bool { +function isPreloadElement(el: Element): boolean { return el.tagName === 'LINK' && el.attributes.getNamedItem('rel')?.value === 'preload'; }