Sdílet prostřednictvím


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 @foreachjazyka 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.

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é