Blazor: Nevýznamné prázdné znaky oříznuté ze součástí v době kompilace
Počínaje ASP.NET Core 5.0 kompilátor Razor vynechá nevýznamné prázdné znaky v komponentách Razor (soubory .razor ) v době kompilace. Diskuzi najdete v tématu problém dotnet/aspnetcore#23568.
Zavedená verze
5,0
Staré chování
Ve verzích 3.x Blazor Serveru a Blazor WebAssembly se ve zdrojovém kódu komponenty respektuje prázdné znaky. Textové uzly pouze prázdné znaky se vykreslují v modelu DOM (Document Object Model) prohlížeče i v případě, že neexistuje žádný vizuální efekt.
Zvažte následující kód komponenty Razor:
<ul>
@foreach (var item in Items)
{
<li>
@item.Text
</li>
}
</ul>
Předchozí příklad vykreslí dva prázdné uzly:
- Mimo blok kódu
@foreach
- Okolo elementu
<li>
- Okolo výstupu
@item.Text
Seznam obsahující 100 položek má za následek 402 prázdných uzlů. To je přes polovinu všech uzlů vykreslených, i když žádný z uzlů prázdných znaků vizuálně neovlivní vykreslený výstup.
Při vykreslování statického HTML pro komponenty se nezachovaly prázdné znaky uvnitř značky. Podívejte se například na zdroj následující komponenty:
<foo bar="baz" />
Prázdné znaky se nezachovají. Předkreslovaný výstup je:
<foo bar="baz" />
Nové chování
Pokud se direktiva @preservewhitespace
nepoužívá s hodnotou true
, prázdné uzly se odeberou, pokud:
- Jsou úvodní nebo koncové v rámci elementu.
- Jsou úvodní nebo koncové v rámci parametru
RenderFragment
. Podřízený obsah se například předává jiné komponentě. - Před blokem kódu
@if
@foreach
jazyka C# nebo ho sledujte.
Důvod změny
Cílem blazoru v ASP.NET Core 5.0 je zlepšit výkon vykreslování a rozdílů. Nevýznamné uzly stromu prázdných znaků spotřebovaly až 40 procent času vykreslování v srovnávacích testech.
Doporučená akce
Ve většině případů není ovlivněno vizuální rozložení vykreslené komponenty. Odebrání prázdných znaků však může mít vliv na vykreslený výstup při použití pravidla CSS, jako je white-space: pre
. Pokud chcete tuto optimalizaci výkonu zakázat a zachovat prázdné znaky, proveďte jednu z následujících akcí:
- Přidejte direktivu
@preservewhitespace true
na začátek souboru .razor , která použije předvolbu pro konkrétní komponentu. - Přidejte direktivu
@preservewhitespace true
do souboru _Imports.razor , který použije předvolbu pro celý podadresář nebo celý projekt.
Ve většině případů se nevyžaduje žádná akce, protože aplikace se obvykle budou chovat normálně (ale rychleji). Pokud odstranění prázdných znaků způsobí nějaké problémy pro konkrétní komponentu, použijte @preservewhitespace true
ji v této komponentě k zakázání této optimalizace.
Ovlivněná rozhraní API
Žádné