Při porovnání výkonu plynulých vazeb s výrazy vázání švýcarů/Tibetu v MVVMCrossu se do hry vstoupí několik faktorů. Zde je podrobné zhroucení:
Přehled typů vazeb
- Fluent Vazby: Jedná se o vazebné výrazy bezpečné pro typ vytvořené v kódu C#. Jsou zvláště užitečné na platformách, jako jsou iOS a UWP, kde nejsou soubory rozvržení XML snadno upraveny. Plynulé vazby poskytují jasný, silně typený způsob, jak vázat vlastnosti pohledu k zobrazení vlastností modelu, což může pomoci snížit chyby runtime zachycení neshod typu v době kompilace [1] [4].
- Swiss/Tibet Vazebné výrazy: Jedná se o výrazy vázání založené na řetězci, které se obvykle používají v souborech rozvržení XML (např. Axml Android). Švýcarské vazby jsou flexibilnější a umožňují složité výrazy, jako je zřetězení a podmíněná logika. Vazba Tibetu to rozšiřuje podporou pokročilejší syntaxe podobné mini jazyce pro vazebné výrazy [1] [6].
Porovnání výkonu
Compile-Time vs. Runtime Evaluation
- plynulé vazby: Vzhledem k tomu, že fluentní vazby jsou definovány v C#, jsou hodnoceny v době kompilace. To znamená, že jakékoli typové chyby nebo problémy s vazbou jsou zachyceny včas, což potenciálně zlepšuje účinnost rozvoje. Skutečný výkon za běhu je však obecně podobný jiným metodám vazebné, protože vazebné nastavení je stále prováděno za běhu.
- Swiss/Tibet Vazby: Tyto vazby jsou vyhodnoceny za běhu, protože jsou definovány jako řetězce v souborech XML. To znamená, že jakékoli chyby ve vazebných výrazch jsou objeveny pouze tehdy, když aplikace běží, což může vést k pomalejším vývojovým cyklům, pokud nebude správně testováno. Po hodnocení runtime je však po nastavení vazby nezpůsobuje pomalejší než plynulé vazby.
Runtime Režie
- plynulé vazby: Režie vazeb plynulých je minimální, protože přímo vytvářejí potřebné vazebné objekty v kódu. Tento přímý přístup může být za běhu o něco efektivnější než analýzu řetězců.
- Swiss/Tibet Vazly: Ty vyžadují analýzu vazebných výrazů z XML za běhu, což zavádí některé režijní náklady ve srovnání s plynulými vazbami. Tato režie je však obvykle malá, pokud se nezabývá velmi složitými nebo četnými vazbami.
Účinnost rozvoje a zpracování chyb
- plynulé vazby: Poskytují lepší účinnost vývoje v důsledku kontrol kompilace, což může nepřímo zlepšit výkon zkrácením času stráveného ladění problémů s runtime vazebné problémy.
- Swiss/Tibet Vazby: I když flexibilnější pro složité výrazy vyžadují více kontrol runtime a mohou vést k pomalejšímu vývoji, pokud nebude správně testován.
Závěr
Pokud jde o surový výkon, jakmile jsou nastaveny, jak plynulé, tak švýcarské/Tibetské vazby jsou obecně srovnatelné. Vazby plynulých však však nabízejí výhody účinnosti rozvoje a detekce chyb kompilace, což může nepřímo zlepšit celkový výkon aplikací zkrácením doby ladění. Vazby Swiss/Tibet poskytují větší flexibilitu ve složitých scénářích, ale vyžadují více kontrol runtime. Volba mezi nimi často závisí na specifických potřebách projektu a preferenci vývojáře pro definice vazby založené na kódu versus XML.
Citace:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-ssues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewModel-Iself
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://www.youtube.com/watch?v=3-CT97SBMXM
[6] https://stackoverflow.com/questions/48824612
[7] https://github.com/mvvmcross/mvvmcross/issues/1342
[8] https://github.com/mvvmcross/mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-tababinding