Komprese rozložení

Stáhnout ukázku Stažení ukázky

Komprese rozložení odebere zadaná rozložení ze stromu vizuálu ve snaze zlepšit výkon vykreslování stránky. Tento článek vysvětluje, jak povolit kompresi rozložení a jaké výhody může přinést.

Přehled

Xamarin.Forms provádí rozložení pomocí dvou řad volání rekurzivních metod:

  • Rozložení začíná v horní části vizuálního stromu stránkou a pokračuje všemi větvemi vizuálního stromu, aby zahrnovaly každý vizuální prvek na stránce. Prvky, které jsou rodičům jiných prvků, zodpovídají za nastavení velikosti a umístění svých dětí vzhledem k sobě.
  • Zneplatnění je proces, při kterém změna elementu na stránce aktivuje nový cyklus rozložení. Prvky se považují za neplatné, pokud už nemají správnou velikost nebo pozici. Každý prvek ve vizuálním stromu s podřízenými prvky je upozorněn vždy, když jedna z podřízených prvků změní velikost. Změna velikosti prvku ve vizuálním stromu proto může způsobit změny, které strom rozklenou.

Další informace o tom, Xamarin.Forms jak rozložení provádí, najdete v Xamarin.Forms.

Výsledkem procesu rozložení je hierarchie nativních ovládacích prvků. Tato hierarchie však zahrnuje další vykreslovací a obálky kontejnerů pro vykreslovací funkce platformy a dále nafoukne vnoření hierarchie zobrazení. Čím hlouběji je úroveň vnoření, tím větší je množství práce, kterou je pro zobrazení Xamarin.Forms stránky zaváděno. U složitých rozložení může být hierarchie zobrazení hluboká i široká a může mít více úrovní vnoření.

Zvažte například následující tlačítko z ukázkové aplikace pro přihlášení k Facebooku:

Tlačítko Facebook

Toto tlačítko je zadáno jako vlastní ovládací prvek s následující hierarchií zobrazení XAML:

<ContentView ...>
    <StackLayout>
        <StackLayout ...>
            <AbsoluteLayout ...>
                <Button ... />    
                <Image ... />
                <Image ... />
                <BoxView ... />
                <Label ... />
                <Button ... />
            </AbsoluteLayout>
        </StackLayout>
        <Label ... />
    </StackLayout>    
</ContentView>

Výslednou vnořenou hierarchii zobrazení je možné prozkoumat pomocí živého vizuálního stromu. V Androidu obsahuje vnořená hierarchie zobrazení 17 zobrazení:

Tlačítko Zobrazit hierarchii pro Facebook

Komprese rozložení, která je k dispozici pro aplikace na platformách iOS a Android, si klade za cíl zploštit vnořování zobrazení odebráním zadaných rozložení z vizuálního stromu, což může zlepšit výkon vykreslování Xamarin.Forms stránek. Výhoda výkonu, která se doručí, se liší v závislosti na složitosti stránky, verzi používaného operačního systému a zařízení, na kterém je aplikace spuštěná. Největší zvýšení výkonu se ale zobrazí na starších zařízeních.

Poznámka

I když se tento článek zaměřuje na výsledky použití komprese rozložení v Androidu, vztahuje se také na iOS.

Komprese rozložení

V jazyce XAML je možné kompresi rozložení povolit nastavením CompressedLayout.IsHeadless připojené vlastnosti na ve třídě true rozložení:

<StackLayout CompressedLayout.IsHeadless="true">
  ...
</StackLayout>   

Alternativně ji můžete povolit v jazyce C# zadáním instance rozložení jako prvního argumentu CompressedLayout.SetIsHeadless metody:

CompressedLayout.SetIsHeadless(stackLayout, true);

Důležité

Vzhledem k tomu, že komprese rozložení odebere rozložení ze stromu vizuálu, není vhodná pro rozložení, která mají vizuální vzhled nebo která získala dotykové ovládání. Proto rozložení, která nastavují vlastnosti VisualElement (například Xamarin_Forms VisualElement _VisualElement_BackgroundColor" data-linktype="absolutní_cesta">BackgroundColor , Xamarin_Forms _VisualElement_IsVisible" data-linktype="absolutní_cesta">IsVisible , Xamarin_Forms BackgroundColor _VisualElement_Rotation" data-linktype="absolutní_cesta">Rotation , Xamarin_Forms _VisualElement_Scale" data-linktype="absolutní_cesta">Scale , Xamarin_Forms _VisualElement_TranslationX" data-linktype="absolute-path">and Xamarin_Forms TranslationXIsVisible _VisualElement_TranslationY" data-linktype="absolute-path">TranslationY nebo které přijímají gesta, nejsou kandidáty na kompresi rozložení. Povolení komprese rozložení u rozložení, které nastavuje vlastnosti vzhledu nebo přijímá gesta, ale nezískají chybu sestavení nebo modulu runtime. Místo toho se použije komprese rozložení a vlastnosti vzhledu a rozpoznávání gest bezobslužně selžou.

U tlačítka Facebook je možné kompresi rozložení povolit ve třech třídách rozložení:

<StackLayout CompressedLayout.IsHeadless="true">
    <StackLayout CompressedLayout.IsHeadless="true" ...>
        <AbsoluteLayout CompressedLayout.IsHeadless="true" ...>
            ...
        </AbsoluteLayout>
    </StackLayout>
    ...
</StackLayout>  

V Androidu to vede k vnořené hierarchii zobrazení 14 zobrazení:

Tlačítko Zobrazit hierarchii pro Facebook s kompresí rozložení

V porovnání s původní vnořenou hierarchií zobrazení 17 zobrazení to představuje snížení počtu zobrazení o 17 %. I když se toto snížení může zdát nevýznamné, může být snížení zobrazení na celé stránce významnější.

Rychlé renderery

Rychlé renderery snižují náklady na nafoukování a vykreslování ovládacích prvků v Xamarin.Forms Androidu tím, že zploštěnou výslednou nativní hierarchii zobrazení. To dále zlepšuje výkon vytvořením menšího počtu objektů, což vede k méně složitému vizuálnímu stromu a menšímu využití paměti. Další informace o rychlých rendererech najdete v tématu Rychlé renderery.

U tlačítka Facebook v ukázkové aplikaci kombinace komprese rozložení a rychlých rendererů vytvoří vnořenou hierarchii zobrazení s 8 zobrazeními:

Hierarchie zobrazení pro tlačítko Facebook s kompresí rozložení a rychlými renderery

V porovnání s původní vnořenou hierarchií zobrazení 17 zobrazení to představuje snížení o 52 %.

Ukázková aplikace obsahuje stránku extrahované ze skutečné aplikace. Bez komprese rozložení a rychlých rendererů vytvoří stránka vnořenou hierarchii zobrazení 130 zobrazení v Androidu. Povolení rychlých rendererů a komprese rozložení u příslušných tříd rozložení snižuje vnořenou hierarchii zobrazení na 70 zobrazení, což je snížení o 46 %.

Souhrn

Komprese rozložení odebere zadaná rozložení ze stromu vizuálu ve snaze zlepšit výkon vykreslování stránky. Výhoda výkonu, kterou to přináší, se liší v závislosti na složitosti stránky, verzi používaného operačního systému a zařízení, na kterém je aplikace spuštěná. Největší zvýšení výkonu se ale zobrazí na starších zařízeních.