Düzen Sıkıştırma

Örnek indir Örneği indirin

Düzen sıkıştırması, sayfa işleme performansını geliştirmek için, belirtilen düzenleri görsel ağaçtan kaldırır. Bu makalede, düzen sıkıştırması ve getirebileceği avantajların nasıl etkinleştirileceği açıklanır.

Genel Bakış

Xamarin.Forms iki dizi özyinelemeli Yöntem çağrısı kullanarak düzen gerçekleştirir:

  • Düzen bir sayfayla görsel ağacın en üstünde başlar ve bir sayfadaki her görsel öğeyi kapsayacak şekilde görsel ağacın tüm dallarından geçer. Diğer öğelere üst öğe olan öğeler, alt öğelerine göre Boyutlandırılması ve konumlandırmaktan sorumludur.
  • Invalidation, sayfadaki bir öğede bulunan bir değişikliğin yeni bir düzen döngüsünü tetiklediği işlemdir. Öğeler artık doğru boyut veya konuma sahip olmadıkları zaman geçersiz sayılır. Alt öğeleri olan görsel ağaçtaki her öğe, alt öğelerinden biri boyutları değiştirdiğinde uyarı gönderilir. Bu nedenle, görsel ağaçtaki bir öğenin boyutundaki bir değişiklik, ağacı etkileyen değişikliklere neden olabilir.

Düzen nasıl gerçekleştirilir hakkında daha fazla bilgi için Xamarin.Forms bkz. Xamarin.Forms.

Düzen işleminin sonucu, yerel denetimlerin bir hiyerarşisidir. Bununla birlikte, bu hiyerarşi, platform oluşturuculara yönelik ek kapsayıcı Oluşturucu ve sarmalayıcıları, görünüm hiyerarşisi iç içe geçirmeyi daha da içerir. İç içe geçme düzeyi daha derin, Xamarin.Forms bir sayfayı göstermek için gerçekleştirmesi gereken iş miktarı artar. Karmaşık düzenler için görünüm hiyerarşisi, birden fazla iç içe geçme düzeyiyle hem derin hem de geniş olabilir.

Örneğin, Facebook 'ta oturum açmak için örnek uygulamadan aşağıdaki düğmeyi göz önünde bulundurun:

Facebook düğmesi

Bu düğme, aşağıdaki XAML görünüm hiyerarşisine sahip özel bir denetim olarak belirtilir:

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

Ortaya çıkan iç içe görünüm hiyerarşisi canlı görsel ağaç ile incelenebilir. Android 'de, iç içe geçmiş görünüm hiyerarşisi 17 görünüm içerir:

Facebook için hiyerarşiyi görüntüle düğmesi

Xamarin.FormsİOS ve Android platformlarındaki uygulamalar için kullanılabilen düzen sıkıştırması, belirli düzenleri görsel ağaçtan kaldırarak iç içe geçme, sayfa işleme performansını iyileştirebilecek görünümü düzleştirebilir. Sunulan performans avantajı bir sayfanın karmaşıklığına, kullanılmakta olan işletim sisteminin sürümüne ve uygulamanın çalıştığı cihaza bağlı olarak farklılık gösterir. Ancak, en büyük performans kazançları eski cihazlarda görülür.

Not

Bu makale, Android 'de düzen sıkıştırması uygulamanın sonuçlarına odaklanırken, aynı şekilde iOS için de geçerlidir.

Düzen Sıkıştırma

XAML 'de, CompressedLayout.IsHeadless ekli özelliği bir düzen sınıfında ayarlanarak düzen sıkıştırması etkinleştirilebilir true :

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

Alternatif olarak, yöntemin ilk bağımsız değişkeni olarak düzen örneği belirtilerek C# ' de etkinleştirilebilir CompressedLayout.SetIsHeadless :

CompressedLayout.SetIsHeadless(stackLayout, true);

Önemli

Düzen sıkıştırması görsel ağaçtan bir düzeni kaldırdığından, görsel görünümü olan veya dokunma girişi alan düzenler için uygun değildir. Bu nedenle, VisualElement Özellikleri (örneğin, Xamarin_Forms VisualElement _VisualElement_BackgroundColor "Data-LinkType =" Absolute-path ">BackgroundColor , Xamarin_Forms _VisualElement_IsVisible" Data-LinkType = "mutlak yol" >, Xamarin_Forms _VisualElement_Rotation "Data-LinkType =" mutlak yol ">, IsVisibleBackgroundColorRotation Xamarin_Forms _VisualElement_Scale" Data-LinkType = "Absolute- Scale path" >, Xamarin_Forms _VisualElement_TranslationX "Data-LinkType =" Absolute-path ">TranslationX ve Xamarin_Forms IsVisible _VisualElement_TranslationY" Data-LinkType = "absolute-path" >TranslationY veya hareketleri kabul et, düzen sıkıştırması için aday değildir. Ancak, görsel görünüm özelliklerini ayarlayan veya hareketleri kabul eden bir düzende düzen sıkıştırmayı etkinleştirmek, derleme veya çalışma zamanı hatasına neden olmaz. Bunun yerine, düzen sıkıştırması uygulanır, görsel görünüm özellikleri ve hareket tanıma işlemi sessizce başarısız olur.

Facebook düğmesi için, düzen sıkıştırması üç düzen sınıfı üzerinde etkinleştirilebilir:

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

Android 'de, bu 14 görünüm hiyerarşisi iç içe geçmiş bir görünüm hiyerarşisine neden olur:

Düzen sıkıştırması ile Facebook için hiyerarşiyi görüntüle düğmesi

17 görünümlerinin orijinal iç içe geçmiş görünüm hiyerarşisine kıyasla bu, %17 ' nin görünüm sayısında bir azalma temsil eder. Bu azaltma çok önemli görünebilir, ancak sayfanın tamamının üzerindeki görünüm azaltılması daha önemli olabilir.

Hızlı Oluşturucular

Hızlı işleyiciler, Xamarin.Forms sonuçta elde edilen yerel Görünüm hiyerarşisini düzleştirerek Android üzerindeki denetimlerin enflasyon ve işleme maliyetlerini azaltır. Bu, daha az nesne oluşturarak performansı artırır, bu da daha az karmaşık görsel ağaç ve daha az bellek kullanımına neden olur. Hızlı işleyiciler hakkında daha fazla bilgi için bkz. hızlı işleyiciler.

Örnek uygulamadaki Facebook düğmesi için, düzen sıkıştırması ve hızlı işleyiciler birleştiren, 8 görünüm için iç içe geçmiş bir görünüm hiyerarşisi üretir:

Düzen sıkıştırması ve hızlı Işleyicilerde Facebook için hiyerarşiyi görüntüle düğmesi

17 görünümlerinin orijinal iç içe geçmiş görünüm hiyerarşisine kıyasla bu, %52 oranında bir düşüş temsil eder.

Örnek uygulama, gerçek uygulamadan ayıklanan bir sayfa içeriyor. Düzen sıkıştırması ve hızlı işleyiciler olmadan, Bu sayfa Android 'de 130 görünümün iç içe geçmiş Görünüm hiyerarşisini üretir. Uygun düzen sınıflarında hızlı işleyiciler ve düzen sıkıştırmayı etkinleştirmek, iç içe geçmiş Görünüm hiyerarşisini 70 görünüme düşürüyor ve %46 oranında azalmıştır.

Özet

Düzen sıkıştırması, sayfa işleme performansını geliştirmek için, belirtilen düzenleri görsel ağaçtan kaldırır. Bu, sunduğu performans avantajı bir sayfanın karmaşıklığına, kullanılmakta olan işletim sisteminin sürümüne ve uygulamanın çalıştığı cihaza bağlı olarak farklılık gösterir. Ancak, en büyük performans kazançları eski cihazlarda görülür.