Blazor Verbesserte Navigation lädt Ressourcen nicht mehr vor

Blazor gibt für Seiten, die über die erweiterte Navigation erreicht werden, keine <link rel="modulepreload">- oder <link rel="preload">-Ressourcenhinweise mehr aus. Das Vorabladen der Ressource funktioniert weiterhin für die anfängliche Seitenlade und für die normale (nicht erweiterte) Navigation.

Eingeführt in Version

.NET 11

Bisheriges Verhalten

Zuvor gab Blazor von ResourcePreloader bei jeder serverseitig gerenderten Anfrage Preload-<link>-Elemente für Ressourcen aus, die von der Zielseite verwendet werden, einschließlich Anfragen, die als erweiterte Navigation verarbeitet wurden.

Wenn eine erweiterte Navigation erfolgt ist, wurden die neuen Vorladeelemente mit dem vorhandenen DOM zusammengeführt. Die Zusammenführung hat häufig Elemente in einer anderen Reihenfolge als auf der vorherigen Seite hinzugefügt und entfernt <link> , was dazu führte, dass einige Browser mehr Vorladeanforderungen als erforderlich ausgeben. Die Blazor WebAssembly-Laufzeit wird auch bei einer erweiterten Navigation nicht neu gestartet, sodass die nach der ersten Seite dafür ausgegebenen Vorabladehinweise redundant waren.

Neues Verhalten

Ab ASP.NET Core 11 gibt ResourcePreloader nur Vorladeelemente aus, wenn die Antwort keine erweiterte Navigation ist. Von der erweiterten Navigation erreichte Seiten erhalten nicht mehr die impliziten Vorabladehinweise, die das Framework zuvor hinzugefügt hat.

Das vorherige Verhalten beim Laden der ersten Seite (die erste Anforderung, bevor eine erweiterte Navigation erfolgt) ist unverändert. Seiten, zu denen der Benutzer ohne erweiterte Navigation navigiert (z. B. ganzseitige Neuladungen oder externe Navigationen), erhalten weiterhin Vorabladehinweise.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Die impliziten Vorladehinweise während der erweiterten Navigation erzeugten redundante Browservorladeanforderungen, da die WebAssembly-Laufzeit nicht neu gestartet wird und der DOM-Zusammenführungsschritt häufig eine instabile Reihenfolge von <link> Elementen erzeugt hat. Wenn Sie die Hinweise für die erweiterte Navigation entfernen, wird das Netzwerkverhalten besser vorhersehbar.

Weitere Informationen finden Sie unter [Blazor] Vorabladen für die verbesserte Navigation deaktivieren (dotnet/aspnetcore #63544), und bitte kommentieren Sie die geschlossene PR nicht. Wenn Sie Feedback zu dieser Änderung haben, öffnen Sie ein neues Problem im dotnet/aspnetcore GitHub Repository.

Wenn Sie sich bei der erweiterten Navigation auf die impliziten Preload-Hinweise verlassen haben, fügen Sie in Ihrem <link rel="preload"> explizite <link rel="modulepreload">- oder <HeadContent>-Tags für die spezifischen Ressourcen hinzu, die Sie vorzuladen möchten:

<HeadContent>
    <link rel="modulepreload" href="_content/MyLib/big-module.js" />
</HeadContent>

Alternativ können Sie die betreffenden Links von der erweiterten Navigation ausnehmen, wenn das Vorabladen für Sie wichtiger ist als die schnellere Navigation auf derselben Seite. Weitere Informationen finden Sie unter "Erweiterte Navigation" und "Formularbehandlung".

Betroffene APIs

None. Es wurde keine öffentliche API-Oberfläche geändert. Die Änderung wirkt sich auf das implizite Ressourcenvorladen aus, das vom Blazor serverseitigen Rendering ausgeführt wird.