Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Καθώς οι εφαρμογές καμβάς εξελίσσονται για να καλύψουν διαφορετικές επιχειρηματικές ανάγκες, η διατήρηση της βέλτιστης απόδοσης είναι κρίσιμη. Ο χειρισμός δεδομένων, η σχεδίαση διεπαφής χρήστη και η λειτουργικότητα της εφαρμογής απαιτούν προσεκτική προσέγγιση στη βελτιστοποίηση κώδικα.
Καθώς οι εφαρμογές καμβά γίνονται πιο σύνθετες, μπορείτε να αντιμετωπίσετε προβλήματα με την ανάκτηση δεδομένων, την πολυπλοκότητα των τύπων και την ταχύτητα απόδοσης. Για να εξισορροπήσετε την ισχυρή λειτουργικότητα με ένα δυναμικό περιβάλλον εργασίας χρήστη, χρησιμοποιήστε μια συστηματική προσέγγιση για τη βελτιστοποίηση κώδικα.
Βελτιστοποίηση τύπων Power Fx
Αυτή η ενότητα παρέχει τις βέλτιστες πρακτικές για τη βελτιστοποίηση τύπων Power Fx.
Συνάρτηση With
Η συνάρτηση With αξιολογεί έναν τύπο για μία μεμονωμένη καρτέλα. Ο τύπος μπορεί να υπολογίζει μια τιμή ή/και να εκτελεί ενέργειες, όπως η τροποποίηση δεδομένων ή η εργασία με μια σύνδεση. Χρησιμοποιήστε το With για να βελτιώσετε την αναγνωσιμότητα σύνθετων τύπων, διαιρώντας το σε μικρότερους δευτερεύοντες τύπους με όνομα. Αυτές οι τιμές με όνομα ενεργούν όπως οι απλές τοπικές μεταβλητές που περιορίζονται στο πεδίο του With.
With Το είναι καλύτερο από τις μεταβλητές βάσει περιβάλλοντος ή τις καθολικές, επειδή είναι αυτόνομες, εύκολες στην κατανόηση και λειτουργούν σε οποιοδήποτε δηλωτικό περιβάλλον τύπου. Μάθετε περισσότερα σχετικά με τη συνάρτηση With.
Συνάρτηση Concurrent
Η Concurrent συνάρτηση επιτρέπει την ταυτόχρονη αξιολόγηση πολλαπλών τύπων φόρμουλας στο ίδιο πεδίο εάν έχουν κλήσεις συνδέσμων ή Dataverse. Κανονικά, πολλοί τύποι αξιολογούνται ταυτόχρονα όταν τους συνδέετε με τον ; τελεστή (άνω τελεία). Με το Concurrent, η εφαρμογή αξιολογεί ταυτόχρονα όλους τους τύπους σε μια ιδιότητα, ακόμα και μετά τη χρήση του ; τελεστή. Αυτή η ταυτόχρονη εκτέλεση σημαίνει ότι οι χρήστες περιμένουν λιγότερο χρόνο για τα αποτελέσματα. Όταν οι κλήσεις δεδομένων δεν ξεκινούν μέχρι να ολοκληρωθούν οι προηγούμενες κλήσεις, η εφαρμογή πρέπει να περιμένει για το άθροισμα χρόνου όλων των αιτήσεων. Εάν οι κλήσεις δεδομένων ξεκινούν ταυτόχρονα, η εφαρμογή πρέπει να περιμένει μόνο για τον μεγαλύτερο χρόνο αιτήματος. Μάθετε περισσότερα σχετικά με τη συνάρτηση Concurrent.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Συνάρτηση Συγκέντρωσης (Coalesce)
Η συνάρτηση Coalesce αξιολογεί τα ορίσματά της διαδοχικά και επιστρέφει την πρώτη τιμή που δεν είναι κενή ή μια κενή συμβολοσειρά. Χρησιμοποιήστε αυτήν τη λειτουργία για την αντικατάσταση μιας κενής τιμής ή κενής συμβολοσειράς με διαφορετική τιμή, αλλά αφήστε μη κενές και μη κενές τιμές συμβολοσειράς αμετάβλητες. Εάν όλα τα ορίσματα ήταν κενά ή οι συμβολοσειρές είναι κενές, τότε η συνάρτηση επιστρέφει κενό. Το Coalesce είναι ένας καλός τρόπος για να μετατρέψετε κενές συμβολοσειρές σε κενές τιμές. Μάθετε περισσότερα σχετικά με τη συνάρτηση Coalesce.
Αυτό το παράδειγμα απαιτεί value1 και value2 να αξιολογηθεί δύο φορές:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Αυτή η συνάρτηση μπορεί να μειωθεί σε:
Coalesce(value1, value2)
Συνάρτηση IsMatch
Η συνάρτηση IsMatch ελέγχει εάν μια συμβολοσειρά κειμένου αντιστοιχεί ένα μοτίβο που μπορεί να περιλαμβάνει συνήθεις χαρακτήρες, προκαθορισμένα μοτίβα ή μια κανονική παράσταση. Μάθετε περισσότερα σχετικά με τη συνάρτηση IsMatch.
Για παράδειγμα, αυτός ο τύπος αντιστοιχεί σε έναν Ηνωμένες Πολιτείες αριθμό κοινωνικής ασφάλισης:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Επεξήγηση της κανονικής παράστασης:
\\dΤαιριάζει με οποιοδήποτε ψηφίο (0-9).{3}Προσδιορίζει ότι το προηγούμενο μοτίβο ψηφίων (\d) πρέπει να συμβαίνει ακριβώς τρεις φορές.-Ταιριάζει με τον χαρακτήρα ενωτικού.{2}Προσδιορίζει ότι το προηγούμενο μοτίβο ψηφίων (\d) πρέπει να συμβαίνει ακριβώς δύο φορές.{4}Προσδιορίζει ότι το προηγούμενο μοτίβο ψηφίων (\d) πρέπει να συμβαίνει ακριβώς τέσσερις φορές.
Περισσότερα παραδείγματα του IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Βελτιστοποίηση εφαρμογής OnStart
Η OnStart ιδιότητα για εφαρμογές καμβά διαδραματίζει κρίσιμο ρόλο στον ορισμό ενεργειών που προκύπτουν κατά την εκκίνηση της εφαρμογής. Αυτή η ιδιότητα επιτρέπει σε προγραμματιστές εφαρμογών να εκτελούν εργασίες καθολικής προετοιμασίας, να επιτρέπουν τη ρύθμιση μεταβλητών και την εκτέλεση ενεργειών που θα πρέπει να συμβούν μόνο μία φορά κατά τη διαδικασία εκκίνησης της εφαρμογής. Κατανοήστε και χρησιμοποιήστε αποτελεσματικά την OnStart ιδιότητα για να δημιουργήσετε δυναμικές και αποτελεσματικές εφαρμογές καμβά.
Βελτιστοποιήστε τη App.OnStart συνάρτηση με μετεγκατάσταση ρυθμίσεων μεταβλητών σε επώνυμους τύπους. Οι επώνυμοι τύποι, ιδιαίτερα εκείνοι που έχουν ρυθμιστεί νωρίς στον κύκλο ζωής της εφαρμογής, είναι επωφελείς. Αυτοί οι τύποι χειρίζονται την προετοιμασία μεταβλητών με βάση τις κλήσεις δεδομένων, παρέχοντας μια πιο καθαρή και πιο οργανωτική δομή για τον κώδικά σας. Μάθετε περισσότερα στο άρθρο Δημιουργία μεγάλων και σύνθετων εφαρμογών καμβά.
Σημείωμα
Η OnStart ιδιότητα είναι υποχρεωτική. Είναι μια ταξινομημένη λίστα εργασιών που πρέπει να εκτελεστεί πριν εμφανιστεί η πρώτη οθόνη. Επειδή είναι τόσο συγκεκριμένο όχι μόνο για το τι πρέπει να γίνει, αλλά και όταν αυτή η εργασία πρέπει να γίνει με βάση τη σειρά, περιορίζει τις βελτιστοποιήσεις αναδιάταξης και αναβολής που διαφορετικά θα μπορούσαν να γίνουν.
Έναρξη οθόνης
Εάν App.OnStart περιέχει μια Navigate κλήση συνάρτησης, ακόμα και αν βρίσκεται σε μια If συνάρτηση και σπάνια καλείται, η εφαρμογή πρέπει να ολοκληρώσει την εκτέλεση της, προτού App.OnStart εμφανίσει την πρώτη οθόνη της εφαρμογής.
App.StartScreen Το είναι ένας δηλωτικός τρόπος για να υποδείξετε ποια οθόνη πρέπει να εμφανίζεται πρώτη και δεν αποκλείει τις βελτιστοποιήσεις.
Ο ορισμός της ιδιότητας StartScreen εμφανίζει την πρώτη οθόνη πριν την ολοκλήρωση του App.OnStart.
App.StartScreen Το δηλώνει ποιο αντικείμενο οθόνης θα εμφανίζεται πρώτο, χωρίς να απαιτείται καμία προεπεξεργασία.
Αντί να γράφετε κώδικα όπως:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Αλλάξτε τον κώδικα σε:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Περισσότερες πληροφορίες: App.StartScreen: μια δηλωτική εναλλακτική της Navigate στο App.OnStart.
Προειδοποίηση
Αποφύγετε τις εξαρτήσεις μεταξύ StartScreen και OnStart. Η αναφορά ενός επώνυμου τύπου που με τη σειρά του αναφέρεται σε μια καθολική μεταβλητή μπορεί να προκαλέσει μια συνθήκη ανταγωνισμού στην οποία StartScreen δεν έχει εφαρμοστεί σωστά.
Μην δημιουργείτε εξαρτήσεις μεταξύ StartScreen και OnStart. Ενώ η εφαρμογή αποκλείει την αναφορά καθολικών μεταβλητών στο StartScreen, μπορείτε να αναφερθείτε σε έναν επώνυμο τύπο, ο οποίος με τη σειρά του αναφέρεται σε μια καθολική μεταβλητή. Αυτή η προσέγγιση μπορεί να προκαλέσει μια συνθήκη ανταγωνισμού στην οποία η StartScreen δεν εφαρμόζεται σωστά.
Ονοματισμένοι τύποι
Οι επώνυμοι τύποι είναι στατικοί ή σταθερές που μπορούν να οριστούν στο App.Formulas. Όταν δηλωθούν στο App.Formulas, μπορούν να χρησιμοποιηθούν οπουδήποτε στην εφαρμογή και οι τιμές τους παραμένουν πάντα ενημερωμένες. Οι επώνυμοι τύποι στο Power Apps σάς επιτρέπουν να ορίζετε τιμές ή σύνολα τιμών που διαχειρίζεται και ενημερώνει αυτόματα η πλατφόρμα. Αυτή η λειτουργικότητα μετατοπίζει την ευθύνη υπολογισμού αξίας και συντήρησης από τον προγραμματιστή στην Power Apps, εξορθολογίζοντας τη διαδικασία ανάπτυξης. Οι επώνυμοι τύποι στο Power Apps είναι μια ισχυρή δυνατότητα που μπορεί να βελτιώσει σημαντικά τις επιδόσεις και τη δυνατότητα συντήρησης της εφαρμογής.
Οι επώνυμοι τύποι βοηθούν επίσης κατά τη δήλωση θεμάτων εφαρμογής. Όταν δημιουργείτε εταιρικές εφαρμογές, συχνά θέλετε η εφαρμογή να έχει κοινά θέματα που παρέχουν μια συνεπή εμφάνιση και εμπειρία χρήστη. Για να δημιουργήσετε ένα θέμα, πρέπει να δηλώσετε δεκάδες σε εκατοντάδες μεταβλητές στο App.OnStart. Αυτή η δήλωση αυξάνει τη διάρκεια του κώδικα και τον χρόνο προετοιμασίας της εφαρμογής.
Τα σύγχρονα στοιχεία ελέγχου μπορούν επίσης να βοηθήσουν σημαντικά με τη δημιουργία θεμάτων και να μειώσουν τη γραπτή λογική των πελατών για τον χειρισμό θεμάτων. Τα μοντέρνα στοιχεία ελέγχου είναι αυτήν τη στιγμή σε προεπισκόπηση.
Για παράδειγμα, μπορείτε να μετακινήσετε τον παρακάτω κώδικα στο App.OnStartApp.Formulas, το οποίο μειώνει το χρόνο εκκίνησης σε δηλώσεις καθολικών μεταβλητών.
Set(BoardDark, RGBA(181,136,99, 1));
Set(BoardSelect, RGBA(34,177,76,1));
Set(BoardRowWidth, 10); // expected 8 plus two guard characters for regular expressions.
Set(BoardMetadata, 8 \* BoardRowWidth + 1); // which player is next, have pieces moved for castling rules, etc.
Set(BoardBlank, "----------------------------------------------------------------\_00000000000000");
Set(BoardClassic, "RNBQKBNR\_\_PPPPPPPP------------------------\_--------\_\_pppppppp\_\_rnbqkbnr\_\_0000000000");
Μπορείτε να μετακινήσετε τον κώδικα App.Formulas ως εξής:
BoardSize = 70;
BoardLight = RGBA(240,217,181, 1);
BoardDark = RGBA(181,136,99, 1);
BoardSelect = RGBA(34,177,76,1);
BoardRowWidth = 10; // expected 8 plus two guard characters for regular expressions
BoardMetadata = 8 \* BoardRowWidth + 1; // which player is next, have pieces moved for castling rules, etc.
BoardBlank = "----------------------------------------------------------------\_00000000000000";
BoardClassic = "RNBQKBNR\_\_PPPPPPPP------------------------\_--------\_\_pppppppp\_\_rnbqkbnr\_\_0000000000";
Ένα άλλο παράδειγμα είναι στη ρύθμιση Lookups. Εδώ, μια αλλαγή απαιτείται σε έναν Lookup τύπο για τη λήψη των πληροφοριών χρήστη από το Office 365 αντί του Dataverse. Χρειάζεται να κάνετε την αλλαγή μόνο σε ένα σημείο, χωρίς να αλλάζετε τον κώδικα παντού.
UserEmail = User().Email;
UserInfo = LookUp(Users, 'Primary Email' = User().Email);
UserTitle = UserInfo.Title;
UserPhone = Switch(UserInfo.'Preferred Phone', 'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
UserInfo.'Main Phone');
Αυτοί οι τύποι ενσωματώνουν το νόημα του υπολογισμού. Καθορίζουν τη διαδικασία καθορισμού και τα UserEmail, UserInfo, UserTitle και UserPhone βάσει άλλων τιμών. Αυτή η λογική είναι ενσωματωμένη, επιτρέποντας ευρεία χρήση σε ολόκληρη την εφαρμογή, και μπορεί να τροποποιηθεί σε ένα κεντρικό σημείο. Η δυνατότητα προσαρμογής επεκτείνεται και στην εναλλαγή από πίνακα χρηστών Dataverse σε σύνδεση Office 365 χωρίς να χρειάζεται να προσαρμόσετε τύπους που βρίσκονται εντός της εφαρμογής.
Μια άλλη προσέγγιση είναι η βελτιστοποίηση του countRows.
varListItems = CountRows(SampleList)
Με τη Set συνάρτηση, πρέπει να προετοιμάσετε τη μεταβλητή varListItems με το αρχικό πλήθος γραμμών στη λίστα δείγματος και να την ορίσετε ξανά μετά την προσθήκη ή κατάργηση των στοιχείων λίστας. Με επώνυμους τύπους, καθώς αλλάζουν τα δεδομένα, η varListItems μεταβλητή ενημερώνεται αυτόματα.
Οι επώνυμοι τύποι στην App.Formulas ιδιότητα παρέχουν μια πιο ευέλικτη και δηλωτική προσέγγιση για τη διαχείριση τιμών και υπολογισμών σε ολόκληρη την εφαρμογή. Προσφέρουν πλεονεκτήματα όσον αφορά τη χρονική ανεξαρτησία, τις αυτόματες ενημερώσεις, τη δυνατότητα συντήρησης και τους αμετάβλητους ορισμούς σε σύγκριση με το να βασίζεστε αποκλειστικά στο App.OnStart.
| Άποψη | Επώνυμοι τύποι (App.Formulas) | App.OnStart |
|---|---|---|
| Χρονική ανεξαρτησία | Οι τύποι διατίθενται αμέσως και μπορούν να υπολογιστούν με οποιαδήποτε σειρά. | Οι μεταβλητές μπορεί να παρουσιάζουν χρονικές εξαρτήσεις που επηρεάζουν τη διαθεσιμότητα. |
| Αυτόματες ενημερώσεις | Οι τύποι ενημερώνονται αυτόματα όταν αλλάζουν οι εξαρτήσεις. | Οι μεταβλητές ορίζονται μία φορά κατά την εκκίνηση. ενδέχεται να απαιτούνται μη αυτόματες ενημερώσεις. |
| Διατηρησιμότητα | Οι κεντρικοί τύποι σε μία θέση βελτιώνουν τη δυνατότητα συντήρησης. | Οι διάσπαρτες μεταβλητές μπορεί να απαιτούν εύρεση και ενημέρωση σε πολλά σημεία. |
| Αμετάβλητοι ορισμοί | Οι ορισμοί τύπων στο App.Formulas είναι αμετάβλητοι. |
Οι μεταβλητές τιμές μπορεί να είναι ευάλωτες σε ακούσιες αλλαγές. |
Συναρτήσεις που ορίζονται από το χρήστη
Συναρτήσεις οριζόμενες από το χρήστη στο Power Apps Studio επιτρέπουν να δημιουργήσετε τις δικές σας προσαρμοσμένες συναρτήσεις.
Καθορίστε έναν τύπο στην περιοχή App.Formulas ως εξής:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Ο κώδικας λειτουργεί ως εξής:
FunctionNameκαλεί τη συνάρτηση.Το
Parameterείναι το όνομα της καταχώρισης. Μπορείτε να συμπεριλάβετε μία ή περισσότερες εισόδους.DataTypeΤο είναι ο τύπος δεδομένων που πρέπει να συμφωνεί με το όρισμα που μεταβιβάζεται στη συνάρτηση. Οι διαθέσιμοι τύποι δεδομένων περιλαμβάνουν δυαδική τιμή, χρώμα, ημερομηνία, ημερομηνία/ώρα, δυναμικό, GUID, υπερ-σύνδεση, κείμενο και ώρα.OutputDataTypeΤο είναι ο τύπος δεδομένων για την έξοδο της συνάρτησης.FormulaΤο είναι το αποτέλεσμα της συνάρτησης.
Χρησιμοποιείται IfError για την υλοποίηση χειρισμού σφαλμάτων εντός της καθορισμένης συνάρτησης:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Καλέστε την καθορισμένη συνάρτηση από ένα στοιχείο ελέγχου κειμένου ή ετικέτας.
calcAreaOfCircle(Int(*TextInput1*.Text))
Βελτιστοποίηση μεταβλητών
Οι μεταβλητές καθορίζουν και ορίζουν τοπικές και καθολικές τιμές που χρησιμοποιείτε σε ολόκληρη την εφαρμογή σας. Αν και είναι βολικές, η χρήση πάρα πολλών μεταβλητών μπορεί να κάνει την εφαρμογή σας λιγότερο αποτελεσματική.
Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να ορίσετε μια μεταβλητή για κάθε χαρακτηριστικό ενός αντικειμένου, το οποίο απαιτεί χρήση Set για κάθε ιδιότητα.
Set(varEmpName, Office365Users.MyProfile().DisplayName);
Set(varEmpCity, Office365Users.MyProfile().City);
Set(varEmpPhone, Office365Users.MyProfile().BusinessPhones);
Set(varEmpUPN, Office365Users.MyProfile().UserPrincipalName);
Set(varEmpMgrName, Office365Users.ManagerV2(varEmpUPN).DisplayName);
Μια πιο αποτελεσματική προσέγγιση είναι να χρησιμοποιείτε την ιδιότητα μόνο όταν τη χρειάζεστε:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Χρησιμοποιήστε μεταβλητές περιβάλλοντος και καθολικές μεταβλητές συνετά. Εάν το πεδίο μιας μεταβλητής υπερβαίνει μία οθόνη, χρησιμοποιήστε καθολικές μεταβλητές αντί για μεταβλητές περιβάλλοντος.
Πάρα πολλές μεταβλητές που δεν χρησιμοποιούνται αυξάνουν τη χρήση μνήμης και μπορεί να επιβραδύνουν την προετοιμασία της εφαρμογής. Οι πόροι εκχωρούνται για αυτές τις μεταβλητές, ακόμα και αν δεν τους χρησιμοποιείτε. Οι μεταβλητές που δεν χρησιμοποιούνται προσθέτουν επίσης πολυπλοκότητα στη λογική της εφαρμογής σας. Διατηρήστε το Power App καθαρό και οργανωμένο για καλύτερες επιδόσεις και ευκολότερη ανάπτυξη.
Βελτιστοποίηση συλλογών
Οι συλλογές είναι προσωρινές δομές αποθήκευσης δεδομένων που χρησιμοποιείτε για την αποθήκευση και τον χειρισμό δεδομένων σε μια Power Apps εφαρμογή. Ωστόσο, οι συλλογές μπορεί να προκαλέσουν επιβάρυνση επιδόσεων. Περιορίστε τη χρήση των συλλογών και χρησιμοποιήστε τις μόνο όταν είναι απαραίτητο.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Για να μετρήσετε εγγραφές σε μια τοπική συλλογή, χρησιμοποιήστε το CountIf αντί για το Count(Filter()).
Εξετάστε αυτή την προσέγγιση όταν εργάζεστε με συλλογές:
Περιορίστε το μέγεθος και τον αριθμό των συλλογών. Επειδή οι συλλογές είναι τοπικές στην εφαρμογή, αποθηκεύονται στη μνήμη της κινητής συσκευής. Όσο περισσότερες συλλογές δεδομένων περιέχουν ή όσο περισσότερες συλλογές χρησιμοποιείτε, τόσο χειρότερη είναι η απόδοση. Χρησιμοποιήστε τη
ShowColumnsσυνάρτηση για να λάβετε μόνο συγκεκριμένες στήλες. Προσθέστε τηFilterσυνάρτηση για να λαμβάνετε μόνο σχετικά δεδομένα.Το παρακάτω παράδειγμα συνάρτησης επιστρέφει ολόκληρο το σύνολο δεδομένων:
ClearCollect(colDemoAccount, Accounts);Συγκρίνετε αυτή τη συνάρτηση με τον παρακάτω κώδικα, ο οποίος επιστρέφει μόνο συγκεκριμένες εγγραφές και στήλες:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Αυτό το παράδειγμα επιστρέφει το ακόλουθο σύνολο δεδομένων:
Ορίστε μια συχνότητα ανανέωσης προέλευσης δεδομένων. Εάν προσθέσετε νέες εγγραφές στη συλλογή, ανανεώστε την ή συλλέξτε σε αυτήν για να λάβετε τις νέες ή τροποποιημένες εγγραφές. Εάν πολλοί χρήστες ενημερώσουν την πηγή προέλευσης δεδομένων, ανανεώστε τη συλλογή για να λάβετε τις νέες ή τροποποιημένες εγγραφές. Περισσότερες κλήσεις ανανέωσης σημαίνουν μεγαλύτερη αλληλεπίδραση με το διακομιστή.
Προσωρινή αποθήκευση δεδομένων σε συλλογές και μεταβλητές
Μια συλλογή είναι μια μεταβλητή πίνακα που αποθηκεύει γραμμές και στήλες δεδομένων, όχι μόνο ένα μεμονωμένο στοιχείο δεδομένων. Οι συλλογές είναι χρήσιμες για δύο βασικούς λόγους: τη συγκέντρωση δεδομένων πριν από την αποστολή τους στην προέλευση δεδομένων και την προσωρινή αποθήκευση πληροφοριών για την αποφυγή συχνών ερωτημάτων. Επειδή οι συλλογές αντιστοιχούν στη δομή σε μορφή πίνακα της προέλευσης δεδομένων και Power Apps, σας επιτρέπουν να αλληλεπιδράτε αποτελεσματικά με τα δεδομένα, ακόμα και όταν εργάζεστε χωρίς σύνδεση.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Κατάργηση μεταβλητών και μέσων που δεν έχουν χρησιμοποιηθεί
Παρόλο που τα μη απαραίτητα μέσα και οι μεταβλητές ενδέχεται να μην επηρεάζουν σημαντικά τις επιδόσεις της εφαρμογής, είναι σημαντικό να εκκαθαρίσετε την εφαρμογή σας καταργώντας τυχόν μη αχρησιμοποίητα μέσα ή μεταβλητές.
Τα αχρησιμοποίητα αρχεία πολυμέσων αυξάνουν το μέγεθος της εφαρμογής, γεγονός που μπορεί να επιβραδύνει τους χρόνους φόρτωσης της εφαρμογής.
Οι μεταβλητές που δεν χρησιμοποιούνται αυξάνουν τη χρήση μνήμης και μπορούν να επιβραδύνουν ελαφρώς την προετοιμασία της εφαρμογής. Οι πόροι εκχωρούνται για αυτές τις μεταβλητές, ακόμα και αν δεν χρησιμοποιούνται. Πάρα πολλές αχρησιμοποίητες μεταβλητές μπορούν επίσης να κάνουν τη λογική της εφαρμογής πιο περίπλοκη.
Χρησιμοποιήστε τον Έλεγχο εφαρμογών για να εξετάσετε τα μέσα και τις μεταβλητές που δεν έχουν χρησιμοποιηθεί.
Βελτιστοποίηση οθονών και στοιχείων ελέγχου
Για να βελτιστοποιήσετε οθόνες και στοιχεία ελέγχου στο Power Apps, λάβετε υπόψη τις ακόλουθες βέλτιστες πρακτικές.
Αποφύγετε τη διασταύρωση στοιχείων ελέγχου
Τα στοιχεία ελέγχου που αναφέρονται σε στοιχεία άλλων οθονών μπορούν να επιβραδύνουν τη φόρτωση της εφαρμογής και την περιήγηση. Αυτή η προσέγγιση μπορεί να επιβάλει στην εφαρμογή να φορτώσει τις άλλες οθόνες αντί να περιμένει μέχρι ο χρήστης να μεταβεί σε αυτήν την οθόνη. Για να επιλύσετε αυτό το πρόβλημα, χρησιμοποιήστε μεταβλητές, συλλογές και περιβάλλον περιήγησης για να κάνετε κοινή χρήση κατάστασης σε όλες τις οθόνες.
Ο Έλεγχος εφαρμογής στο Power Apps Studio εμφανίζει στοιχεία ελέγχου στα οποία γίνεται παραπομπή. Ελέγχετε τακτικά τον έλεγχο εφαρμογών για να διορθώσετε αυτό το πρόβλημα.
Στην παρακάτω εικόνα, γίνεται παραπομπή στο στοιχείο ελέγχου Συλλογή 1 στο στοιχείο ελέγχου Οθόνη 2, Ετικέτα 2.
Εάν αναφέρετε ένα στοιχείο ελέγχου από την πρώτη οθόνη στην εφαρμογή στη δεύτερη οθόνη, δεν υπάρχει αποτέλεσμα επιδόσεων καθώς η πρώτη οθόνη είναι ήδη φορτωμένη. Αυτή η συμπεριφορά είναι στην πραγματικότητα ευεργετική καθώς η εφαρμογή είναι δηλωτική αντί να χρησιμοποιεί μεταβλητές.
Εάν αναφέρετε στοιχεία ελέγχου που δεν έχουν φορτωθεί ακόμα, όπως την πρώτη οθόνη αναφοράς σε ένα στοιχείο ελέγχου που ονομάζεται Label 3 από την οθόνη 3, η εφαρμογή φορτώνει αυτή την οθόνη στη μνήμη.
Ενεργοποίηση DelayOutput σε στοιχεία ελέγχου κειμένου
Η ρύθμιση DelayOutput , όταν οριστεί σε true, καταχωρεί τα δεδομένα εισόδου χρήστη μετά από καθυστέρηση μισού δευτερολέπτου. Αυτή η καθυστέρηση είναι χρήσιμη για την αναβολή δαπανηρών λειτουργιών μέχρι ο χρήστης να ολοκληρώσει την εισαγωγή κειμένου, όπως το φιλτράρισμα όταν τα δεδομένα εισόδου χρησιμοποιούνται σε άλλους τύπους.
Για παράδειγμα, εξετάστε μια συλλογή της οποίας τα Στοιχεία φιλτράρονται ανάλογα με το τι εισαγάγει ο χρήστης στο στοιχείο ελέγχου TextInput:
Εάν ορίσετε την ιδιότητα DelayOutput σε false, η οποία είναι η προεπιλογή, η συλλογή φιλτράρεται αμέσως όταν πληκτρολογηθεί οποιοδήποτε κείμενο. Εάν έχετε μια συλλογή με πολλά στοιχεία, η επαναφόρτωση της συλλογής με αλλαγές αμέσως επιβραδύνει τις επιδόσεις. Καλύτερα να περιμένεις. Αυτή η συμπεριφορά είναι πρακτική όταν χρησιμοποιείτε τη
TextInputσυμβολοσειρά αναζήτησης ή τηStartsWithσυνάρτηση.Εάν ορίσετε την ιδιότητα DelayOutput σε true, υπάρχει μια μικρή καθυστέρηση προτού εντοπιστούν οι αλλαγές. Αυτή η καθυστέρηση παρέχει χρόνο για να ολοκληρώσετε την πληκτρολόγηση. Η καθυστέρηση λειτουργεί καλά με την
TextInput.OnChangeιδιότητα . Εάν έχετε ενέργειες που συνδέονται με τις αλλαγές, δεν θέλετε να ενεργοποιηθούν μέχρι να ολοκληρώσετε την πληκτρολόγηση στο πεδίο.
Ανάθεση και επεξεργασία στην πλευρά του διακομιστή
Η χρήση ανάθεσης και επεξεργασίας στην πλευρά του διακομιστή επιτρέπει στην εφαρμογή σας να χειρίζεται αποτελεσματικά μεγάλα σύνολα δεδομένων, εκφορτώνοντας λειτουργίες στην προέλευση δεδομένων.
Ανάθεση
Η ανάθεση στο Power Apps αναφέρεται στη δυνατότητα της εφαρμογής να εκφορτώνει ορισμένες λειτουργίες στην υποκείμενη προέλευση δεδομένων αντί να επεξεργάζεται τις λειτουργίες μέσα στο ίδιο το Power Apps. Με τη χρήση ανάθεσης στο Power Apps, μπορείτε να δημιουργήσετε πιο αποτελεσματικές και κλιμακούμενες εφαρμογές που έχουν καλές επιδόσεις ακόμη και σε σενάρια που περιλαμβάνουν μεγάλα σύνολα δεδομένων. Να γνωρίζετε τους περιορισμούς ανάθεσης για συγκεκριμένες προελεύσεις δεδομένων και λειτουργίες και να σχεδιάζετε αντίστοιχα την εφαρμογή σας για να επιτύχετε βέλτιστες επιδόσεις.
Σημείωμα
Δεν έχουν δυνατότητα ανάθεσης όλες οι λειτουργίες. Μάθετε περισσότερα σχετικά με την ανάθεση στους περιορισμούς ερωτημάτων: Όρια ανάθεσης και ερωτημάτων.
Η ανάθεση έχει πολλά πλεονεκτήματα, όπως η βελτιστοποίηση ερωτημάτων και η υποστήριξη για μεγάλα σύνολα δεδομένων. Επιπλέον, εάν τα δεδομένα προέλευσης αλλάζουν συχνά, η ανάθεση βοηθά να διατηρείτε τα δεδομένα ενημερωμένα.
Μείωση των κλήσεων API σε προέλευση δεδομένων
Μερικές φορές, μπορεί να φαίνεται βολικό να δημιουργείτε συλλογές εκτελώντας ενώσεις στην εφαρμογή καμβάς σας. Ας δούμε το παρακάτω παράδειγμα. Στο παράδειγμα, υπάρχουν δύο πίνακες: Οδηγοί και Φορτηγά. Ο κώδικας δημιουργεί μια συλλογή οδηγών και στοιχείων φορτηγών και για κάθε φορτηγό, καλεί τον οδηγό στον οποίο ανήκει το φορτηγό.
// Bad code
ClearCollect(vartruckdata, AddColumns('Truck Details',
"CITY",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],City),
"FIRSTNAME",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],'Driver First Name'),
"LASTNAME",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],'Driver Last Name'),
"STATE",LookUp(Drivers, 'Truck Details'\[@'Dummy ID'\] = Drivers\[@'Truck Details'\],State)));
Η εκτέλεση μιας τέτοιας σύνδεσης στην εφαρμογή καμβάς μπορεί να δημιουργήσει πολλές κλήσεις στην προέλευση δεδομένων, γεγονός που οδηγεί σε αργούς χρόνους φόρτωσης.
Μια καλύτερη προσέγγιση είναι:
// Good code
Set(
varTruckData,
LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID',
'Driver First Name'
) & LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID',
'Driver Last Name'
)
);
Set(
varTruckData,
With(
{
vDriver: LookUp(
Drivers,
'Dummy ID' = ThisRecord.'Dummy ID'
)
},
vDriver.'Driver First Name' & vDriver.'Driver Last Name'
)
)
Στο σενάριο πραγματικού χρόνου, μπορείτε να μειώσετε τους χρόνους φόρτωσης από πέντε λεπτά σε λιγότερο από 10 δευτερόλεπτα, διορθώνοντας τα δεδομένα στην προέλευση.
Επεξεργασία από την πλευρά του διακομιστή
Διαφορετικές προελεύσεις δεδομένων, όπως SQL και Dataverse σας επιτρέπουν να αναθέσετε την επεξεργασία δεδομένων, όπως φίλτρα και αναζητήσεις, στην προέλευση δεδομένων. Στον SQL Server, μπορείτε να δημιουργήσετε προβολές που ορίζονται από ένα ερώτημα. Στο Dataverse, μπορείτε να δημιουργήσετε προσθήκες με χαμηλό κώδικα για την επεξεργασία δεδομένων στο διακομιστή και να επιστρέψετε μόνο τα τελικά αποτελέσματα στην εφαρμογή καμβά.
Η ανάθεση της επεξεργασίας δεδομένων στο διακομιστή μπορεί να βελτιώσει τις επιδόσεις, να μειώσει τον κώδικα από την πλευρά του προγράμματος-πελάτη και να διευκολύνει τη συντήρηση της εφαρμογής σας.
Μάθετε περισσότερα για τα πρόσθετα στο Dataverse.
Βελτιστοποίηση μοτίβων δεδομένων ερωτημάτων
Η βελτιστοποίηση του τρόπου με τον οποίο τα δεδομένα ερωτημάτων της εφαρμογής σας μπορούν να μειώσουν σημαντικά τους χρόνους φόρτωσης και να βελτιώσουν τη συνολική ανταπόκριση.
Χρήση ρητής επιλογής στήλης
Η δυνατότητα ρητής επιλογής στήλης (ECS) είναι ενεργοποιημένη από προεπιλογή για όλες τις νέες εφαρμογές. Εάν δεν είναι ενεργοποιημένο για την εφαρμογή σας, ενεργοποιήστε την. Το ECS μειώνει αυτόματα τον αριθμό των στηλών που ανακτώνται μόνο σε αυτές που χρησιμοποιούνται στην εφαρμογή. Εάν το ECS δεν είναι ενεργοποιημένο, ενδέχεται να λάβετε περισσότερα δεδομένα από όσα χρειάζεστε, γεγονός που μπορεί να επηρεάσει τις επιδόσεις. Ορισμένες φορές, όταν μια εφαρμογή λαμβάνει δεδομένα μέσω συλλογών, η αρχική προέλευση μιας στήλης μπορεί να χαθεί. Το ECS απορρίπτει στήλες εάν δεν μπορεί να προσδιορίσει αν χρησιμοποιούνται. Για να επιχειρούν το ECS να διατηρήσει μια στήλη που λείπει, χρησιμοποιήστε την παράσταση Power Fx ShowColumns μετά από μια αναφορά συλλογής ή σε ένα στοιχείο ελέγχου.
Αποφύγετε να καλείτε το Power Automate για να συμπληρώσετε μια συλλογή
Μια συνήθης πρακτική είναι η χρήση του Power Automate για λήψη και συμπλήρωση των συλλογών στο Power Apps. Μολονότι αυτή η προσέγγιση είναι έγκυρη, υπάρχουν περιπτώσεις όπου ενδέχεται να μην είναι η πιο αποτελεσματική επιλογή. Η κλήση του Power Automate προσθέτει καθυστέρηση δικτύου και κόστος 0,6 δευτερολέπτων στην απόδοση για τη δημιουργία της ροής Power Automate.
Η υπερβολική χρήση ροών του Power Automate μπορεί επίσης να οδηγήσει σε όρια εκτέλεσης και περιορισμό ροής. Αξιολογείτε πάντα τις αντιστοιχίες μεταξύ του λανθάνοντος χρόνου δικτύου και του κόστους απόδοσης.
Εξαλείψτε το πρόβλημα N+1
Το πρόβλημα N+1 είναι ένα σύνηθες πρόβλημα στα ερωτήματα βάσης δεδομένων, όπου, αντί να πάρετε όλα τα απαιτούμενα δεδομένα σε ένα ερώτημα, γίνονται πολλαπλά επιπλέον ερωτήματα για την ανάκτηση σχετικών δεδομένων. Αυτό το πρόβλημα μπορεί να οδηγήσει σε προβλήματα επιδόσεων, καθώς κάθε επιπλέον ερώτημα επιβαρύνεται με έξοδα.
Μια απλή κλήση όπως αυτή για φόρτωση μιας συλλογής μπορεί να δημιουργήσει κλήσεις N+1 στην προέλευση δεδομένων:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Στο περιβάλλον εφαρμογών και συλλογών καμβά, το πρόβλημα N+1 μπορεί να προκύψει όταν εργάζεστε με προελεύσεις δεδομένων και συλλογές που εμφανίζουν σχετικές εγγραφές. Το πρόβλημα συνήθως προκύπτει όταν γίνονται περισσότερα ερωτήματα για κάθε στοιχείο που εμφανίζεται στη συλλογή, που οδηγεί σε εμπόδια στις επιδόσεις.
Χρησιμοποιήστε την Προβολή αντικειμένων σε SQL Server για να αποφύγετε το πρόβλημα ερωτήματος N+1 ή αλλάξτε το περιβάλλον εργασίας χρήστη για να αποφύγετε την ενεργοποίηση του σεναρίου N+1.
Το Dataverse αυτόματα λαμβάνει τα απαιτούμενα δεδομένα σχετικών πινάκων και μπορείτε να επιλέξετε τις στήλες από σχετικούς πίνακες.
ThisItem.Account.'Account Name'
Εάν RelatedDataSource το μέγεθος είναι μικρό (λιγότερες από 500 εγγραφές), αποθηκεύστε το στο cache σε μια συλλογή και χρησιμοποιήστε τη συλλογή για να οδηγήσετε το σενάριο ερωτήματος Αναζήτηση (N+1).
Περιορισμός μεγέθους πακέτου
Παρόλο που το Power Apps βελτιστοποιεί τη φόρτωση εφαρμογών, μπορείτε να λάβετε μέτρα για να μειώσετε το αποτύπωμα των εφαρμογών σας. Ένα μειωμένο αποτύπωμα είναι ιδιαίτερα σημαντικό για τους χρήστες παλαιότερων συσκευών ή χρηστών σε τοπικές ρυθμίσεις όπου υπάρχει υψηλότερος λανθάνων χρόνος ή μειωμένο εύρος ζώνης.
Αξιολογήστε τα μέσα που είναι ενσωματωμένα στην εφαρμογή σας. Εάν δεν χρησιμοποιείται κάτι, διαγράψτε το.
Για παράδειγμα, οι ενσωματωμένες εικόνες μπορεί να είναι πολύ μεγάλες. Αντί για αρχεία PNG, δείτε αν μπορείτε να χρησιμοποιήσετε εικόνες SVG. Να είστε προσεκτικοί με τη χρήση κειμένου σε εικόνες SVG, επειδή η γραμματοσειρά πρέπει να εγκατασταθεί στο πρόγραμμα-πελάτη. Μια λύση όταν πρέπει να εμφανίσετε κείμενο είναι να τοποθετήσετε σε υπέρθεση μια ετικέτα κειμένου σε μια εικόνα.
Αξιολογήστε εάν η επίλυση είναι κατάλληλη για τον παράγοντα μορφής. Η επίλυση μιας εφαρμογής για κινητές συσκευές δεν χρειάζεται να είναι τόσο μεγάλη όσο η ανάλυση για μια εφαρμογή για επιτραπέζιο υπολογιστή. Πειραματιστείτε για να έχετε τη σωστή ισορροπία ποιότητας και μεγέθους εικόνας.
Εάν έχετε αχρησιμοποίητες οθόνες, διαγράψτε τες. Να είστε προσεκτικοί ώστε να μην διαγράψετε τυχόν κρυφές οθόνες που χρησιμοποιούν μόνο οι δημιουργοί εφαρμογών ή οι διαχειριστές.
Αξιολογήστε αν προσπαθείτε να χωρέσετε πολλές ροές εργασιών σε μία εφαρμογή. Για παράδειγμα, έχετε οθόνες διαχειριστή και οθόνες πελατών στην ίδια εφαρμογή; Σε αυτή την περίπτωση, εξετάστε το ενδεχόμενο να τις χωρίσετε σε μεμονωμένες εφαρμογές. Αυτή η προσέγγιση διευκολύνει επίσης πολλούς χρήστες να εργάζονται στις εφαρμογές ταυτόχρονα και περιορίζει την "ακτίνα έκρηξης" (ποσότητα δοκιμής) όταν οι αλλαγές στην εφαρμογή απαιτούν πλήρη δοκιμαστική κάρτα.
Βελτιστοποίηση ForAll
Η συνάρτηση ForAll στο Power Apps χρησιμοποιείται για τη δρομολόγηση μέσω ενός πίνακα καρτελών και εφαρμόζει έναν τύπο ή ένα σύνολο τύπων σε κάθε καρτέλα. Παρόλο που η ίδια η συνάρτηση είναι ευέλικτη, η ακατάλληλη χρήση της συνάρτησης μπορεί γρήγορα να καταστήσει την ForAll εφαρμογή σας λιγότερο αποδοτική.
Η ForAll συνάρτηση είναι μια μοναδική διαδοχική συνάρτηση αντί για μια ταυτόχρονη συνάρτηση. Επομένως, εξετάζει μόνο μία εγγραφή κάθε φορά, λαμβάνει το αποτέλεσμα και, στη συνέχεια, συνεχίζει στην επόμενη εγγραφή μέχρι να περάσει από όλες τις εγγραφές στην εμβέλειά της.
Αποφύγετε την ένθεση ForAll. Αυτή η πρακτική μπορεί να οδηγήσει σε εκθειακές επαναλήψεις και να επηρεάσει σημαντικά τις επιδόσεις.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Μαζική ενημέρωση της βάσης δεδομένων
Μπορείτε να χρησιμοποιήσετε ForAll και Patch να ενημερώσετε δέσμη τη βάση δεδομένων. Ωστόσο, να είστε προσεκτικοί όταν χρησιμοποιείτε τη σειρά των ForAll και Patch.
Η ακόλουθη συνάρτηση είναι η καλύτερη προσέγγιση, για παράδειγμα:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Ότι η ακόλουθη προσέγγιση είναι λιγότερο αποτελεσματική:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);