Κατά τη σύγκριση των `getAllValues ()` to `getValue ()`, οι συνέπειες απόδοσης εξαρτώνται σε μεγάλο βαθμό από το πλαίσιο και την ειδική εφαρμογή αυτών των μεθόδων στο σύστημα ή το πλαίσιο που χρησιμοποιείτε. Ωστόσο, υπάρχουν ορισμένες γενικές αρχές που μπορούν να καθοδηγήσουν την κατανόησή μας:
Γενικές εκτιμήσεις απόδοσης
1. Αριθμός κλήσεων: Γενικά, η πραγματοποίηση λιγότερων κλήσεων για την ανάκτηση δεδομένων είναι πιο αποτελεσματικός από την πραγματοποίηση πολλαπλών κλήσεων. Εάν το `getAllValues ()` ανακτά όλα τα απαραίτητα δεδομένα σε μία κλήση, μπορεί να είναι πιο αποτελεσματική από την κλήση `getValue ()` πολλές φορές για κάθε τιμή.
2. Ανάκτηση δεδομένων: Εάν το `getAllValues ()` παρασύρει περισσότερα δεδομένα από τα απαραίτητα, θα μπορούσε ενδεχομένως να είναι πιο αργή λόγω της αυξημένης μεταφοράς και επεξεργασίας δεδομένων. Ωστόσο, εάν χρειάζεστε όλες τις τιμές ούτως ή άλλως, είναι πιθανότατα πιο αποτελεσματικό να τις φτιάξετε ταυτόχρονα και όχι μεμονωμένα.
3. Προσωρινή αποθήκευση και βελτιστοποίηση: Μερικά συστήματα μπορεί να αποθηκεύουν τα αποτελέσματα ή να βελτιστοποιήσουν τις επαναλαμβανόμενες κλήσεις στο `getValue ()`, που θα μπορούσαν να μετριάσουν τις διαφορές απόδοσης. Ωστόσο, εάν το `getAllValues ()` είναι βελτιστοποιηθεί για χύδην ανάκτηση, μπορεί να προσφέρει ακόμα καλύτερη απόδοση.
συγκεκριμένα σενάρια
- Google Apps Script: Στο σενάριο Google Apps, χρησιμοποιώντας το `getValues ()` (παρόμοιο με το `getAllValues ()`) συνιστάται γενικά έναντι πολλαπλών κλήσεων `getValue () επειδή μειώνει τον αριθμό των αλληλεπιδράσεων με το API Google Sheets, το οποίο μπορεί να βελτιώσει σημαντικά την απόδοση [3].
- Πρόσβαση αντανάκλασης και ιδιοκτησίας: Σε προβληματισμό .NET, μέθοδοι όπως `getProperties ()` μπορεί να είναι αργή λόγω του γενικού εξοπλισμού του ίδιου του προβληματισμού. Ωστόσο, τα αποτελέσματα της προσωρινής αποθήκευσης μπορούν να βελτιώσουν δραματικά την απόδοση [1] [7].
- ServiceNow: Στο ServiceNow, `getValue ()` είναι γενικά ταχύτερο από το `getDisplayValue ()` επειδή ανακτά την ακατέργαστη τιμή χωρίς πρόσθετη επεξεργασία [5].
Συμπέρασμα
Η επιλογή μεταξύ `getAllValues ()` και `getValue ()` θα πρέπει να βασίζεται στις συγκεκριμένες απαιτήσεις της εφαρμογής σας και στα χαρακτηριστικά απόδοσης του συστήματος με το οποίο εργάζεστε. Εάν χρειάζεστε όλες τις τιμές και μπορείτε να τις ανακτήσετε αποτελεσματικά με το `getAllValues ()`, είναι πιθανό η καλύτερη επιλογή. Ωστόσο, εάν χρειάζεστε μόνο ένα υποσύνολο τιμών ή εάν το `getValue ()` είναι βελτιστοποιημένο για την περίπτωση χρήσης σας, μπορεί να είναι προτιμότερο. Πάντα να εξετάζετε παράγοντες όπως το μέγεθος των δεδομένων, η καθυστέρηση του δικτύου και οι βελτιστοποιήσεις που αφορούν το σύστημα κατά τη λήψη αυτής της απόφασης.
Αναφορές:[1] https://lotsacode.wordpress.com/2010/04/13/reflection-type-getproperties-and-ferformance/
[2] https://www.reddit.com/r/googleappsscript/comments/px959t/getrangegetvalues_performance_implication_when/
[3] https://stackoverflow.com/questions/42776311/optimizing-code-getvalue-and-looping
[4] https://drupal.stackexchange.com/questions/214036/getvalue-of-multiple-values-field-return-only-the-first-value
[5] https://www.servicenow.com/community/in-other-news/how-to-use-getdisplayvalue-and-getvalue-for-gliderecord-or/ba-p/2896719
[6] https://www.servicenow.com/docs/bundle/yokohama-api-reference/page/app-store/dev_portal/api_reference/glideform/concept/c_glideformapi.html
[7] http://www.mattwarren.org/2016/12/14/why-is-reflection-slow/
[8] https://www.ag-grid.com/angular-data-grid/component-cell-renderer/
[9] https://salesforce.stackexchange.com/questions/8829/getinstance-vs-getvalues-custom-shetting