Blazor 強化されたナビゲーションでリソースがプリロードされなくなりました

Blazor 拡張ナビゲーションを通じて到達したページの <link rel="modulepreload"> または <link rel="preload"> リソース ヒントが出力されなくなりました。 リソースの事前読み込みは、初期ページ読み込みと通常の (強化されていない) ナビゲーションで引き続き機能します。

導入されたバージョン

.NET 11

以前の動作

以前は、Blazor の ResourcePreloader は、強化ナビゲーションとして処理されるリクエストを含め、サーバー レンダリングされるすべてのリクエストで、遷移先ページで使用されるリソースに対するプリロード <link> 要素を出力していました。

拡張ナビゲーションが発生すると、新しいプリロード要素が既存の DOM にマージされました。 マージでは、多くの場合、前のページとは異なる順序で要素 <link> 追加および削除されるため、一部のブラウザーでは、必要以上に多くのプリロード要求が発行されました。 Blazor WebAssembly ランタイムは拡張ナビゲーションでも再起動しないため、最初のページが冗長になった後に事前読み込みヒントが生成されます。

新しい動作

ASP.NET Core 11 以降では、ResourcePreloaderは、応答が強化されたナビゲーションでない場合にのみプリロード要素を出力します。 拡張ナビゲーションによってアクセスされたページは、フレームワークが以前に追加した暗黙的なプリロード ヒントを受け取らなくなりました。

初期ページ読み込み時の以前の動作 (拡張ナビゲーションが発生する前の最初の要求) は変更されません。 ユーザーが拡張ナビゲーションなしで移動するページ (ページ全体の再読み込みや外部ナビゲーションなど) も、プリロード ヒントを受け取ります。

破壊的変更の種類

この変更は 動作の変更です。

変更の理由

拡張ナビゲーション中の暗黙的なプリロード ヒントでは、WebAssembly ランタイムが再起動せず、DOM マージ ステップによって <link> 要素の順序が不安定になることが多いため、冗長なブラウザー プリロード要求が生成されました。 拡張ナビゲーションのヒントを削除すると、より予測可能なネットワーク動作が得られます。

詳細については、「 [Blazor] 拡張ナビゲーションのプリロードを無効にする (dotnet/aspnetcore #63544)」を参照してください。閉じた PR についてはコメントしないでください。 この変更に関するフィードバックがある場合は、dotnet/aspnetcore GitHub リポジトリで新しい問題を開きます。

拡張ナビゲーション中に暗黙的なプリロード ヒントに依存していた場合は、プリロードする特定のリソースに対して明示的な <link rel="preload"> または <link rel="modulepreload"> タグを <HeadContent> に追加します。

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

または、その場でのすばやいナビゲーションよりも事前読み込みのほうが重要である場合は、関連するリンクを拡張ナビゲーションの対象外にします。 詳細については、「 拡張ナビゲーションとフォーム処理」を参照してください。

影響を受ける API

None. パブリック API サーフェスは変更されません。 この変更は、Blazor サーバーサイドレンダリングによって実行される暗黙的なリソースのプリロードに影響します。