Κατά τη σύγκριση της απόδοσης των ευέλικτων δεσμών με τις εκφράσεις δέσμευσης ελβετικών/θιβωτών στο MVVMCROSS, έρχονται σε λειτουργία αρκετοί παράγοντες. Ακολουθεί μια λεπτομερής κατανομή:
Επισκόπηση των τύπων δέσμευσης
- Fluent Bindings: Πρόκειται για εκφράσεις δέσμευσης ασφαλούς τύπου που δημιουργούνται στον κώδικα C#. Είναι ιδιαίτερα χρήσιμα σε πλατφόρμες όπως το iOS και το UWP, όπου τα αρχεία διάταξης XML δεν είναι εύκολα επεξεργάσιμα. Οι ευέλικτες δεσμεύσεις παρέχουν έναν σαφή, έντονα τρόπο για να δεσμεύσουν τις ιδιότητες προβολής για να προβάλλουν ιδιότητες μοντέλου, οι οποίες μπορούν να συμβάλουν στη μείωση των σφαλμάτων χρόνου εκτέλεσης με την αλίευση των αναντιστοιχιών τύπου σε χρόνο μεταγλώττισης [1] [4].
- Εκφράσεις δέσμευσης ελβετικού/θιβεριού: Αυτές είναι εκφράσεις δέσμευσης με βάση τα συμβολοσειρά που χρησιμοποιούνται συνήθως σε αρχεία διάταξης XML (π.χ. AXML του Android). Οι ελβετικές δεσμεύσεις είναι πιο ευέλικτες και επιτρέπουν σύνθετες εκφράσεις όπως η συγκόλληση και η λογική υπό όρους. Η δέσμευση του Θιβέτ επεκτείνει αυτό υποστηρίζοντας πιο προηγμένη σύνταξη παρόμοια με μια μίνι γλωσσική για δεσμευτικές εκφράσεις [1] [6].
Σύγκριση απόδοσης
Compile-time έναντι αξιολόγησης χρόνου εκτέλεσης
- Fluent Bindings: Δεδομένου ότι οι ευέλικτες δεσμεύσεις ορίζονται στο C#, αξιολογούνται κατά τη διάρκεια του χρόνου μεταγλωττισμού. Αυτό σημαίνει ότι τυχόν σφάλματα τύπου ή ζητήματα δέσμευσης αλιεύονται νωρίς, ενδεχομένως βελτιώνοντας την αποτελεσματικότητα της ανάπτυξης. Ωστόσο, η πραγματική απόδοση κατά το χρόνο εκτέλεσης είναι γενικά παρόμοια με άλλες μεθόδους δέσμευσης, επειδή η ρύθμιση δέσμευσης εξακολουθεί να εκτελείται κατά το χρόνο εκτέλεσης.
- Συμβουλές Ελβετικής/Θιβέτ: Αυτές οι δεσμεύσεις αξιολογούνται κατά το χρόνο εκτέλεσης επειδή ορίζονται ως χορδές σε αρχεία XML. Αυτό σημαίνει ότι τυχόν σφάλματα στις δεσμευτικές εκφράσεις ανακαλύπτονται μόνο όταν εκτελείται η εφαρμογή, η οποία μπορεί να οδηγήσει σε βραδύτερους κύκλους ανάπτυξης, αν δεν δοκιμαστεί σωστά. Ωστόσο, η αξιολόγηση του χρόνου εκτέλεσης δεν τους κάνει εγγενώς πιο αργούς από τις άπταιστες δεσμεύσεις μόλις ρυθμιστούν οι δεσμεύσεις.
overhead runtime
- Fluent Bindings: Το γενικό κόστος των άπταιστων δεσμών είναι ελάχιστη επειδή δημιουργούν άμεσα τα απαραίτητα αντικείμενα δέσμευσης στον κώδικα. Αυτή η άμεση προσέγγιση μπορεί να είναι ελαφρώς πιο αποτελεσματική από την ανάλυση των εκφράσεων συμβολοσειρών κατά το χρόνο εκτέλεσης.
- Συμβουλές Ελβετικής/Θιβέτ: Αυτές απαιτούν την ανάλυση των εκφράσεων δέσμευσης από το XML κατά το χρόνο εκτέλεσης, οι οποίες εισάγουν κάποια επιβάρυνση σε σύγκριση με τις ευέλικτες δεσμεύσεις. Ωστόσο, αυτό το γενικό κόστος είναι συνήθως μικρό, εκτός αν ασχολείται με πολύ πολύπλοκες ή πολυάριθμες συνδέσεις.
Ανάπτυξη αποτελεσματικότητας και χειρισμού σφαλμάτων
- Fluent Bindings: Παρέχετε καλύτερη αποτελεσματικότητα ανάπτυξης λόγω των ελέγχων που μεταγλωττίζουν, οι οποίοι μπορούν να βελτιώσουν έμμεσα τις επιδόσεις μειώνοντας το χρόνο που αφιερώνεται στα προβλήματα δέσμευσης χρόνου εκτέλεσης.
- Συμβουλές Ελβετικής/Θιβέτ: Ενώ είναι πιο ευέλικτες για σύνθετες εκφράσεις, απαιτούν περισσότερους ελέγχους χρόνου εκτέλεσης και μπορούν να οδηγήσουν σε βραδύτερη ανάπτυξη εάν δεν έχουν δοκιμαστεί σωστά.
Συμπέρασμα
Από την άποψη της ακατέργαστης απόδοσης, τόσο τα άπταιστα όσο και οι ελβετικές/θιβερίδες είναι γενικά συγκρίσιμες μόλις ρυθμιστούν. Ωστόσο, οι άπταιστες δεσμεύσεις προσφέρουν πλεονεκτήματα στην αποτελεσματικότητα της ανάπτυξης και την ανίχνευση σφαλμάτων κατάρτισης, η οποία μπορεί να βελτιώσει έμμεσα τη συνολική απόδοση των εφαρμογών μειώνοντας το χρόνο εντοπισμού σφαλμάτων. Οι δεσμεύσεις της Ελβετικής/Θιβέτ παρέχουν μεγαλύτερη ευελιξία σε σύνθετα σενάρια, αλλά απαιτούν περισσότερους ελέγχους χρόνου εκτέλεσης. Η επιλογή μεταξύ τους συχνά εξαρτάται από τις συγκεκριμένες ανάγκες του έργου και την προτίμηση του προγραμματιστή για ορισμούς δέσμευσης που βασίζονται σε κώδικα έναντι XML.
Αναφορές:[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-itself
[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