diff --git a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts index b86ff3bd8d03..2707f3755a63 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 (isPreloadElement(a as Element) || isPreloadElement(b as Element)) { + 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 @@ -319,6 +324,10 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { } } +function isPreloadElement(el: Element): boolean { + 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[];