Lorsque vous comparez les performances des liaisons courantes aux expressions de liaison suisse / tibet dans MVVMCross, plusieurs facteurs entrent en jeu. Voici une ventilation détaillée:
Aperçu des types de liaison
- liaisons courantes: ce sont des expressions de liaison de type type créées dans le code C #. Ils sont particulièrement utiles sur des plates-formes comme iOS et UWP où les fichiers de mise en page XML ne sont pas facilement modifiables. Les liaisons courantes fournissent une manière claire et fortement typée de lier les propriétés de la vision pour afficher les propriétés du modèle, ce qui peut aider à réduire les erreurs d'exécution en attrapant les décalages de type au moment de la compilation [1] [4].
- Expressions de liaison suisses / tibet: ce sont des expressions de liaison basées sur des chaînes généralement utilisées dans les fichiers de mise en page XML (par exemple, AXML d'Android). Les liaisons suisses sont plus flexibles et permettent des expressions complexes comme la concaténation et la logique conditionnelle. La liaison du Tibet étend cela en prenant en charge une syntaxe plus avancée similaire à un mini-langage pour les expressions de liaison [1] [6].
Comparaison des performances
Compilé-temps vs évaluation d'exécution
- Régales courantes: Étant donné que les liaisons courantes sont définies en C #, elles sont évaluées au moment de la compilation. Cela signifie que toutes les erreurs de type ou les problèmes de liaison sont capturés tôt, améliorant potentiellement l'efficacité de développement. Cependant, les performances réelles lors de l'exécution sont généralement similaires à d'autres méthodes de liaison car la configuration de liaison est toujours exécutée au moment de l'exécution.
- liaisons suisses / tibet: ces liaisons sont évaluées au moment de l'exécution car elles sont définies comme des chaînes dans les fichiers XML. Cela signifie que toutes les erreurs dans les expressions de liaison ne sont découvertes que lorsque l'application s'exécute, ce qui peut entraîner des cycles de développement plus lents s'ils ne sont pas correctement testés. Cependant, l'évaluation de l'exécution ne les rend pas intrinsèquement plus lentes que les liaisons courantes une fois les liaisons configurées.
Overhead Overhead
- liaisons courantes: la surcharge des liaisons courantes est minime car elles créent directement les objets de liaison nécessaires dans le code. Cette approche directe peut être légèrement plus efficace que l'analyse des expressions de chaînes à l'exécution.
- Régales suisses / Tibet: Celles-ci nécessitent l'analyse des expressions de liaison de XML au moment de l'exécution, qui introduit des frais généraux par rapport aux liaisons courantes. Cependant, ces frais généraux sont généralement petits, sauf si les liaisons très complexes ou nombreuses.
Efficacité de développement et gestion des erreurs
- Régales courantes: fournir une meilleure efficacité de développement en raison des contrôles de temps de compilation, ce qui peut indirectement améliorer les performances en réduisant le temps passé à déboguer les problèmes de liaison d'exécution.
- Régales suisses / Tibet: Bien que plus flexibles pour les expressions complexes, elles nécessitent plus de vérifications d'exécution et peuvent conduire à un développement plus lent s'ils ne sont pas correctement testés.
Conclusion
En termes de performances brutes, les liaisons courantes et suisses / tibet sont généralement comparables une fois configurées. Cependant, les liaisons courantes offrent des avantages dans l'efficacité de développement et la détection des erreurs en temps de compilation, qui peuvent indirectement améliorer les performances globales de l'application en réduisant le temps de débogage. Les liaisons suisses / Tibet offrent plus de flexibilité dans des scénarios complexes mais nécessitent plus de vérifications d'exécution. Le choix entre eux dépend souvent des besoins spécifiques du projet et de la préférence du développeur pour les définitions de liaison basées sur le code par rapport à XML.
Citations:[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-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