Bij het vergelijken van de prestaties van vloeiende bindingen met Zwitsers/Tibet -bindingsuitdrukkingen in MVVMCross spelen verschillende factoren in het spel. Hier is een gedetailleerde uitsplitsing:
Overzicht van bindende typen
- Vloeiende bindingen: dit zijn type-veilige bindingsuitdrukkingen die zijn gemaakt in C# -code. Ze zijn vooral handig op platforms zoals iOS en UWP waar XML -lay -outbestanden niet gemakkelijk bewerkbaar zijn. Vloeiende bindingen bieden een duidelijke, sterk ingepakte manier om view-eigenschappen te binden om modeleigenschappen te bekijken, die kunnen helpen bij het verminderen van runtime-fouten door het vangen van type mismatches op compilatietijd [1] [4] te vangen.
- Zwitserse/Tibet-bindingsuitdrukkingen: dit zijn string-gebaseerde bindingsuitdrukkingen die meestal worden gebruikt in XML-lay-outbestanden (bijv. Android's AXML). Zwitserse bindingen zijn flexibeler en zorgen voor complexe expressies zoals aaneenschakeling en voorwaardelijke logica. Tibet-binding breidt dit uit door meer geavanceerde syntaxis te ondersteunen vergelijkbaar met een mini-taal voor bindende expressies [1] [6].
Prestatievergelijking
Compile-time versus runtime-evaluatie
- Vloeiende bindingen: aangezien vloeiende bindingen worden gedefinieerd in C#, worden ze geëvalueerd op compileertijd. Dit betekent dat fouten of bindende problemen vroeg worden gevangen, waardoor de ontwikkelingsefficiëntie mogelijk wordt verbeterd. De werkelijke prestaties tijdens runtime zijn echter over het algemeen vergelijkbaar met andere bindingsmethoden omdat de bindende opstelling nog steeds wordt uitgevoerd tijdens runtime.
- Zwitserse/Tibet -bindingen: deze bindingen worden tijdens runtime geëvalueerd omdat ze worden gedefinieerd als tekenreeksen in XML -bestanden. Dit betekent dat eventuele fouten in de bindende uitdrukkingen alleen worden ontdekt wanneer de app wordt uitgevoerd, wat kan leiden tot langzamere ontwikkelingscycli als ze niet correct worden getest. De runtime -evaluatie maakt ze echter niet inherent langzamer dan vloeiende bindingen zodra de bindingen zijn ingesteld.
Runtime Overhead
- Vloeiende bindingen: de overhead van vloeiende bindingen is minimaal omdat ze direct de benodigde bindingsobjecten in code maken. Deze directe aanpak kan iets efficiënter zijn dan uitroeptekeningen bij runtime parseren.
- Zwitserse/Tibet -bindingen: deze vereisen het parseren van de bindingsuitdrukkingen van XML tijdens runtime, die enige overhead introduceert in vergelijking met vloeiende bindingen. Deze overhead is echter meestal klein, tenzij het omgaan met zeer complexe of talloze bindingen.
Ontwikkelingsefficiëntie en foutafhandeling
- Vloeiende bindingen: zorg voor een betere ontwikkelingsefficiëntie als gevolg van compilatie-tijdcontroles, die de prestaties indirect kunnen verbeteren door de tijd die wordt besteed aan debuggende runtime-bindende kwesties te verminderen.
- Zwitserse/Tibet -bindingen: hoewel flexibeler voor complexe expressies, vereisen ze meer runtime -controles en kunnen ze leiden tot langzamere ontwikkeling als ze niet correct worden getest.
Conclusie
In termen van ruwe prestaties zijn zowel vloeiend als Zwitsers/Tibet -bindingen over het algemeen vergelijkbaar zodra het is ingesteld. Vloeiende bindingen bieden echter voordelen in ontwikkelingsefficiëntie en compilatie-tijdfoutdetectie, die indirect de algemene applicatieprestaties kunnen verbeteren door de foutopsporingstijd te verminderen. Zwitserse/Tibet -bindingen bieden meer flexibiliteit in complexe scenario's, maar vereisen meer runtime -controles. De keuze tussen hen hangt vaak af van de specifieke behoeften van het project en de voorkeur van de ontwikkelaar voor op code gebaseerde versus XML-gebaseerde bindingsdefinities.
Citaten:[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-self
[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