Pri porovnaní výkonnosti plynulých viazaní s expresiami väzby švajčiarskych/tibetov v MVVMCross prichádza do hry niekoľko faktorov. Tu je podrobné rozdelenie:
Prehľad typov väzby
- Fluentné väzby: Jedná sa o výrazy viazaných viazaných typu vytvorené v kóde C#. Obzvlášť užitočné na platformách ako iOS a UWP, kde súbory rozloženia XML nie sú ľahko upraviteľné. Fluentné väzby poskytujú jasný, silne napísaný spôsob, ako sa viazať na vlastnosti zobrazenia na zobrazenie vlastností modelu, čo môže pomôcť znížiť chyby runtime chytením nezhody typu v čase kompilácie [1] [4].
- Väzbové výrazy Swiss/Tibet: Ide o väzbové výrazy založené na reťazci, ktoré sa zvyčajne používajú v súboroch rozloženia XML (napr. Android's AXML). Švajčiarske väzby sú flexibilnejšie a umožňujú zložité výrazy, ako je zreťazenie a podmienená logika. Väzba Tibet to rozširuje podporou pokročilejšej syntaxe podobnej mini jazyku pre väzbové expresie [1] [6].
Porovnanie výkonu
Compile-Time vs. vyhodnotenie runtime
- Fluentné väzby: Pretože plynulé väzby sú definované v C#, hodnotia sa v čase kompilácie. To znamená, že akékoľvek chyby typu alebo záväzné problémy sa chytia včas, čo potenciálne zlepšuje účinnosť vývoja. Skutočný výkon za behu je však vo všeobecnosti podobný iným metódam väzby, pretože nastavenie väzby sa stále vykonáva za behu.
- Viazanie švajčiarskych/tibetov: Tieto väzby sa hodnotia za behu, pretože sú definované ako reťazce v súboroch XML. To znamená, že akékoľvek chyby vo väzbových výrazoch sa objavia iba vtedy, keď aplikácia spustí, čo môže viesť k pomalším vývojovým cyklom, ak nie sú správne testované. Hodnotenie runtime však po nastavení väzieb ich vo svojej podstate neznamená pomalšie ako plynulé väzby.
runtime réžia
- Fluentné väzby: Horná hlavná viazania je minimálna, pretože priamo vytvárajú potrebné väzobné objekty v kóde. Tento priamy prístup môže byť o niečo efektívnejší ako analýza výrazov reťazcov za behu.
- Viazanie švajčiarskych/tibetov: Tieto vyžadujú analýzu väzbových výrazov z XML za behu, čo predstavuje určité režijné náklady v porovnaní s plynulými väzbami. Táto réžia je však zvyčajne malá, pokiaľ sa nezaoberá veľmi zložitými alebo početnými väzbami.
Vývojová efektívnosť a spracovanie chýb
- Fluentné väzby: Poskytnite lepšiu účinnosť vývoja v dôsledku kontroly času, ktoré môžu nepriamo zlepšiť výkonnosť znížením času stráveného ladením problémov s viazaním runtime.
- Viazania švajčiarskych/tibetov: Aj keď sú flexibilnejšie pre zložité výrazy, vyžadujú viac kontrol runtime a môžu viesť k pomalšiemu vývoju, ak nie sú správne testované.
Záver
Pokiaľ ide o surovú výkonnosť, plynulé aj švajčiarske viazania/Tibet sú vo všeobecnosti porovnateľné po nastavení. Fluentné väzby však ponúkajú výhody v oblasti vývoja a detekcie chýb v čase kompilácie, čo môže nepriamo zlepšiť celkový výkon aplikácie znížením doby ladenia. Viazania Swiss/Tibet poskytujú väčšiu flexibilitu v zložitých scenároch, ale vyžadujú viac kontrol runtime. Výber medzi nimi často závisí od konkrétnych potrieb projektu a preferencie vývojára pre definície väzbových definícií založených na kóde verzus XML.
Citácie:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-isesues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itfesefese
[4] https://www.mvvmcross.com/documentation/funmamentals/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/funmamentals/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding