Når du sammenligner ytelsen til flytende bindinger til sveitsiske/tibetbindende uttrykk i MVVMCROSS, kommer flere faktorer inn i spill. Her er et detaljert sammenbrudd:
Oversikt over bindingstyper
- Flytende bindinger: Dette er typesikkere bindende uttrykk som er opprettet i C# -kode. De er spesielt nyttige på plattformer som iOS og UWP der XML -layoutfiler ikke lett kan redigeres. Flytende bindinger gir en klar, sterkt typisk måte å binde visningsegenskaper for å se modellegenskaper, noe som kan bidra til å redusere runtime-feil ved å fange opp feilpasninger ved kompileringstidspunktet [1] [4].
- Sveitsiske/Tibet-bindende uttrykk: Dette er strengbaserte bindingsuttrykk som vanligvis brukes i XML-layoutfiler (f.eks. Androids AXML). Sveitsiske bindinger er mer fleksible og gir rom for komplekse uttrykk som sammenkobling og betinget logikk. Tibet-binding utvider dette ved å støtte mer avansert syntaks som ligner på et minispråk for bindende uttrykk [1] [6].
Performance Comparison
Compile-Time vs. Runtime Evaluation
- Flytende bindinger: Siden flytende bindinger er definert i C#, blir de evaluert ved kompileringstid. Dette betyr at alle typer feil eller bindingsproblemer blir fanget tidlig, og potensielt forbedrer utviklingseffektiviteten. Imidlertid er den faktiske ytelsen ved kjøretid generelt lik andre bindingsmetoder fordi bindingsoppsettet fremdeles utføres ved kjøretid.
- Sveitsiske/tibetbindinger: Disse bindingene blir evaluert ved kjøretid fordi de er definert som strenger i XML -filer. Dette betyr at eventuelle feil i de bindende uttrykkene bare blir oppdaget når appen kjører, noe som kan føre til langsommere utviklingssykluser hvis ikke riktig testet. Imidlertid gjør ikke runtime -evalueringen dem iboende tregere enn flytende bindinger når bindingene er satt opp.
Runtime overhead
- Flytende bindinger: Overhead for flytende bindinger er minimalt fordi de direkte lager de nødvendige bindende objekter i kode. Denne direkte tilnærmingen kan være litt mer effektiv enn å analysere strenguttrykk ved kjøretid.
- Sveitsiske/tibetbindinger: Disse krever analysering av bindingsuttrykkene fra XML ved kjøretid, som introduserer noe overhead sammenlignet med flytende bindinger. Imidlertid er denne overhead typisk liten med mindre det arbeider med veldig komplekse eller mange bindinger.
Utviklingseffektivitet og feilhåndtering
- Flytende bindinger: Gi bedre utviklingseffektivitet på grunn av kompileringstidskontroller, noe som indirekte kan forbedre ytelsen ved å redusere tidsbruken av å feilsøke runtime-bindingsproblemer.
- Sveitsiske/Tibet -bindinger: Selv om de er mer fleksible for komplekse uttrykk, krever de mer kjøretid og kan føre til tregere utvikling hvis de ikke er riktig testet.
Konklusjon
Når det gjelder rå ytelse, er både flytende og sveitsiske/tibetbindinger generelt sammenlignbare når de er satt opp. Imidlertid gir flytende bindinger fordeler i utviklingseffektivitet og feildeteksjon av kompileringstid, noe som indirekte kan forbedre den generelle applikasjonsytelsen ved å redusere feilsøkingstid. Sveitsiske/tibetbindinger gir mer fleksibilitet i komplekse scenarier, men krever mer kjøretid. Valget mellom dem avhenger ofte av prosjektets spesifikke behov og utviklerens preferanse for kodebaserte kontra XML-baserte bindingsdefinisjoner.
Sitasjoner:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to- viewmodel-efself
[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-databinding