Θα σας εκφράσω μια σκέψη μου και μου λέτε πως το βλέπετε κι εσείς.
Λιγότερα Roundtrips: Όταν έχεις μια multi-tier εφαρμογή προσπαθείς να ελαττώσεις όσο γίνεται τις κλήσεις από το ένα tier στο άλλο (συνήθως μεταξύ του end-user client και του application server). Ο σκοπός είναι πάντα να βελτιώσεις το performance και το scalability. Δηλαδή πιο γρήγορος client και λιγότερα resources στον server.
Modularity: Όταν έχεις ένα modular client (modules προστίθενται/ενεργοποιηούνται ανάλογα με configuration και άλλα κριτήρια) προσπαθείς να κρατήσεις αυτά τα modules ανεξάρτητα το ένα από το άλλο. π.χ. στην εικόνα υπάρχουν 2 modules που καλούν τον server για να πάρουν τα data που θέλουν να εμφανίσουν. Δεν γίνεται μια κλήση για να φέρει τα data και για τα δυο, γιατί πολύ απλά δεν είναι απαραίτητο ότι και τα δυο αυτά modules θα είναι ορατά. Επίσης δεν είναι απαραίτητο ότι είναι ορατά μόνο αυτά. Μπορεί αν υπάρχουν και άλλα ορατά modules!
Τι κάνουμε λοιπόν (με σειρά ευκολίας και λιγότερων συμβιβασμών);
α) Cache: Όπου είναι δυνατόν προσπαθούμε να χρησιμοποιήσουμε κάποιας μορφής cache. Έτσι αφήνουμε τα modules να κάνουν τις κλήσεις που θέλουν ανεξάρτητα από τα άλλα (καλό modularity), αλλά τα data να έρχονται από την cache χωρίς να γίνεται κλήση στον server (λιγότερα roundtrips).
β) Asynchronous calls: Χρησιμοποιούμε ασύγχρονες κλήσεις για το φόρτωμα των δεδομένων. Δεν γλιτώνουμε roundtrips αλλά πιθανότατα κάνουμε τον client να λειτουργεί πιο γρήγορα μια που τα modules θα καλούν τον server παράλληλα και όχι το ένα μετά το άλλο.
γ) Sacrifice: Προσπαθούμε να ομαδοποιήσουμε κάποιες κλήσεις θυσιάζοντας το modularity. π.χ. ενώνουμε κάποια modules που θεωρούμε ότι το πιθανότερο είναι να λειτουργούν ταυτόχρονα.
δ) Composite Server Calls: Δημιουργούμε κάποιους mediators/proxies στον client τους οποίους καλούν τα modules αντί να καλούν απευθείας τον server. Αυτοί οι mediators γνωρίζουν ποια modules είναι ενεργά και ξέρουν ότι κάποια στιγμή θα λάβουν κλήσεις από αυτά. Καλούν λοιπόν μια φορά τον server και φέρνουν όλα τα data που θέλουν τα modules χρησιμοποιώντας μια composite server method που παίρνει ένα array από requests (ένα request από κάθε module) και επιστρέφει ένα array από responses. Όταν πάρουν την απάντηση με το array από τα responses το κρατάνε κάπου και όταν τα modules καλούν δίνουν έτοιμες τις απαντήσεις.
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.