Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Pohjaan perustuvien kehittyessä vastaamaan erilaisia liiketoimintatarpeita suorituskyvyn pitäminen optimaalisena on olennaisen tärkeää. Tietojen käsittely, käyttöliittymän suunnittelu ja sovelluksen toiminnot edellyttävät huolellista lähestymistapaa koodin optimointiin.
Kun pohjaan perustuvista sovelluksista tulee monimutkaisempia, esiin voi tulla ongelmia tietojen noutamisen, kaavan monimutkaisuuden ja hahmonnusnopeuden kanssa. Tasapainota vahvat toiminnot ja reagoiva käyttöliittymä järjestelmällisesti koodioptimoinnin avulla.
Power Fx -kaavan optimointi
Tässä osiossa on parhaita käytäntöjä Power Fx -kaavojen optimoinnille.
With-funktio
With-funktio suorittaa kaavan arvioinnin yhden tietueen osalta. Kaava voi laskea arvon tai suorittaa toimintoja, kuten tietojen muokkaus tai yhteyden käyttäminen.
With-funktion avulla voit tehdä monimutkaisista kaavoista helppolukuisempia jakamalla ne pienemmiksi nimellisiksi alikaavoiksi. Nämä nimetyt arvot toimivat kuten yksinkertaiset paikalliset muuttujat, jotka rajoittuvat With-funktion vaikutusalueeseen.
With on parempi kuin konteksti tai yleiset muuttujat, koska se on itsenäinen, helppo ymmärtää ja toimii missä tahansa deklaratiivisessa kaavakontekstissa. Lisätietoja With-funktiosta.
Samanaikainen funktio
Funktio Concurrent mahdollistaa useiden saman ominaisuuden kaavojen laskemisen samanaikaisesti, jos niillä on liitintä tai Dataverse-kutsuja. Yleensä useita kaavoja arvioidaan samanaikaisesti, kun ne ketjutetaan operaattorilla ; (puolipiste).
Concurrent-funktiota käytettäessä sovellus arvioi kaikki ominaisuuden kaavat samanaikaisesti myös, kun käytetään operaattoria ;. Tämä samanaikaisuus tarkoittaa, että käyttäjät odottavat tuloksia vähemmän. Kun tietokutsut eivät ala ennen edellisten kutsujen valmistumista, sovellus odottaa kaikkien pyyntöaikojen summaa. Jos tietokutsut alkavat samanaikaisesti, sovellus odottaa vain pisimmän pyyntöajan verran. Lue lisätietoja Concurrent-funktiosta.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Coalesce-funktio
Coalesce-funktio arvioi argumentin järjestyksessä ja palauttaa ensimmäisen arvon, joka ei ole tyhjä tai tyhjä merkkijono. Tämän funktion avulla voidaan korvata tyhjänarvo tai tyhjä merkkijono toisella arvolla siten, että muita kuin tyhjäarvoja ja tyhjiä merkkijonon arvoja ei muuteta. Jos kaikki argumentit ovat tyhjiä tai tyhjiä merkkijonoja, funktio palauttaa tyhjän arvon.
Coalesce on hyvä tapa muuntaa tyhjät merkkijonot tyhjiksi arvoiksi. Lue lisätietoja Coalesce-funktiosta.
Tämä esimerkki edellyttää, että sekä value1 että value2 arvioidaan kahdesti.
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Tämä funktio voidaan tiivistää muotoon
Coalesce(value1, value2)
IsMatch-funktio
IsMatch-funktio testaa, vastaako merkkijono mallia, joka koostuu normaaleista merkeistä, esimääritetyistä malleista tai säännönmukaisesta lausekkeesta. Lue lisätietoja IsMatch-funktiosta.
Esimerkiksi tämä kaava vastaa United States sosiaaliturvatunnusta:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Säännöllisen lausekkeen kuvaus:
\\dvastaa mitä tahansa numeroa (0–9).{3}määrittää, että edeltävän numeromallin (\d) on esiinnyttävä täsmälleen kolme kertaa.-vastaa tavuviivaa.{2}määrittää, että edeltävän numeromallin (\d) on esiinnyttävä täsmälleen kaksi kertaa.{4}määrittää, että edeltävän numeromallin (\d) on esiinnyttävä täsmälleen neljä kertaa.
Lisää IsMatch-esimerkkejä:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Sovelluksen optimointi OnStart-ominaisuudessa
Pohjaan OnStart perustuvien sovellusten ominaisuudella on ratkaiseva rooli toimintojen määrittämisessä, jotka tapahtuvat sovelluksen käynnistämisen yhteydessä. Tämä ominaisuus antaa sovelluskehittäjille mahdollisuuden suorittaa yleisiä käynnistystehtäviä, määrittää muuttujia ja suorittaa toimintoja, joiden on tapahduttava vain kerran sovelluksen käynnistysprosessin aikana. Ymmärrät ja hyödynnät ominaisuutta OnStart tehokkaasti ja luot reagoivia ja tehokkaita pohjaan perustuvia sovelluksia.
Tehosta funktiota App.OnStart siirtämällä muuttujien asetukset nimettyihin kaavoihin. Nimetyt kaavat, erityisesti sovelluksen elinkaaren varhaisessa vaiheessa määritetyt, ovat edullisia. Nämä kaavat käsittelevät muuttujien valmistelun tietokutsujen perusteella, minkä vuoksi kaavojen rakenne aiempaa siistimpi ja paremmin järjestetty. Lisätietoja on artikkelissa Suurten ja monimutkaisten pohjaan perustuvien sovellusten luominen.
Muistiinpano
Ominaisuus OnStart on imperatiivista. Se on järjestetty työluettelo, joka on tehtävä ennen kuin ensimmäinen näyttö tulee näkyviin. Koska siinä ei ole kyse vain siitä, mitä pitää tehdä, vaan myös siitä, milloin työ on tehtävä järjestyksen perusteella, se rajoittaa uudelleenjärjestelyä ja lykkäystä optimointeja, jotka muuten voitaisiin tehdä.
Aloitusnäyttö
Jos App.OnStart sisältää funktiokutsun Navigate , vaikka se olisi funktiossa If ja sitä kutsutaan harvoin, sovelluksen on suoritettava loppuun App.OnStart ennen kuin se näyttää sovelluksen ensimmäisen näytön.
App.StartScreen on deklaraatiivinen tapa ilmaista, mikä näyttö näytetään ensin, eikä se estä optimointeja.
StartScreen-omaisuuden määrittäminen näyttää ensimmäisen näytön, ennen kuin App.OnStart on valmis.
App.StartScreen esittelee, minkä näytön objektin haluat näyttää ensin ilman esikäsittelyä.
Sen sijaan että olisi kirjoitettava seuraavanlaista koodia:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Koodi muutetaan muotoon
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Lisätietoja: App.StartScreen: deklaratiivisen vaihtoehdon Siirtyminen App.OnStartissa.
Varoitus
StartScreen- ja OnStart-ominaisuuksien välisiä riippuvaisuuksia on vältettävä. Viittaamalla nimettyyn kaavaan, joka puolestaan viittaa yleiseen muuttujaan, voi aiheuttaa kilpailutilan, jossa StartScreen ei käytetä oikein.
Älä luo riippuvuuksia StartScreen ja OnStart välille. Vaikka sovellus estää viittaamasta yleisiin muuttujiin kohteessa StartScreen, voit viitata nimettyun kaavaan, joka puolestaan viittaa yleiseen muuttujaan. Tämä lähestymistapa voi aiheuttaa kilpailutilan, jossa StartScreen sitä ei käytetä oikein.
Nimetyt kaavat
Nimetyt kaavat ovat staattisia tai vakioita, jotka voidaan määrittää kohteessa App.Formulas. Kun määritys on kohteessa App.Formulas, niitä voi käyttää missä tahansa sovelluksessa, ja niiden arvot pysyvät aina ajan tasalla. Power Apps nimetyillä kaavoilla voit määrittää arvoja tai arvojoukkoja, joita käyttöympäristö hallitsee ja päivittää automaattisesti. Tämä toiminto siirtää vastuun arvon laskutoimituksesta ja sen ylläpitosta kehittäjältä Power Apps, mikä sujuvoittaa kehitysprosessia. Power Apps nimetyt kaavat ovat tehokas ominaisuus, joka voi parantaa merkittävästi sovelluksen suorituskykyä ja ylläpidettävyyttä.
Nimetyt kaavat auttavat myös sovellusteemojen ilmoittamisessa. Yrityssovelluksia luotaessa halutaan usein, että sovelluksella on yhteisiä teemoja, jotka tarjoavat yhtenäisen ulkoasun ja käyttökokemuksen. Jos haluat luoda teeman, sinun on määritettävä kymmeniä tai satoja muuttujia kohteessa App.OnStart. Tämä ilmoitus pidentää koodin pituutta ja sovelluksen alustusaikaa.
Myös moderneista ohjausobjekteista voi olla merkittävästi hyötyä teeman muodostuksessa, ja niiden avulla voidaan vähentää teeman muodostukseen tarvittavaa asiakkaan kirjoittamaa koodia. Modernit ohjausobjektit ovat tällä hetkellä esiversiossa.
Voit esimerkiksi siirtää seuraavan koodin App.OnStart kohtaan App.Formulas, mikä lyhentää yleisen muuttujan määrittelyjen käynnistysaikaa.
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");
Voit siirtää koodin seuraavasti 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";
Toinen esimerkki on asetus Lookups. Tässä vaaditaan muutos Lookup -kaavassa, jotta käyttäjätiedot saadaan Office 365 Dataversen sijaan. Sinun tarvitsee tehdä muutos vain yhdessä paikassa muuttamatta koodia kaikkialla.
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');
Nämä kaavat ilmaisevat laskennan olennaisen osan. Ne ilmaisevat, miten UserEmail, UserInfo, UserTitle ja UserPhone määritetään muiden arvojen perusteella. Tämä logiikka kapseloidaan, mikä mahdollistaa laaja-alaisen hyödyntämisen koko sovelluksessa sekä muokkaamisen yhdessä sijainnissa. Mukautuvuus ulottuu Dataverse Users -taulukosta Office 365-liittimeen siirtymiseen ilman muutoksia sovelluksessa hajallaan oleviin kaavoihin.
Vaihtoehtoisesti voidaan optimoida countRows-ominaisuus.
varListItems = CountRows(SampleList)
-funktiolla Set muuttuja varListItems on alustettava näyteluettelon rivien alkumäärällä ja määritettävä se uudelleen sen jälkeen, kun luettelokohteet on lisätty tai poistettu. Nimettyjen kaavojen myötä muuttuja päivittyy automaattisesti tietojen muuttuessa varListItems .
-ominaisuuden App.Formulas nimetyt kaavat tarjoavat joustavamman ja deklaratiivisemman lähestymistavan arvojen ja laskutoimitusten hallintaan koko sovelluksessa. Ne tarjoavat etuja ajoitusomavaraisuuden, automaattisten päivitysten, ylläpidettävyyden ja muuttumattoman määritelmän suhteen verrattuna siihen, että luotat pelkästään App.OnStart.
| Ominaisuus | Nimetyt kaavat (App.Formulas) | App.OnStart |
|---|---|---|
| Ajoituksen riippumattomuus | Kaavat ovat heti käytettävissä, ja ne voidaan laskea missä tahansa järjestyksessä. | Muuttujat saattavat aiheuttaa käytettävyyteen vaikuttavia ajoitusriippuvuuksia. |
| Automaattiset päivitykset | Kaavat päivittyvät automaattisesti riippuvuuksien muuttuessa. | Muuttujat määritetään kerran käynnistyksen aikana. manuaalisia päivityksiä saattaa olla tarpeen. |
| Ylläpidettävyys | Keskitetyt kaavat yhdessä paikassa parantavat ylläpidettävyyttä. | Hajallaan olevat muuttujat saattavat edellyttää etsimistä ja päivittämistä useissa paikoissa. |
| Muuttumattomat määritykset | In App.Formulas kaavamääritykset ovat muuttumattomia. |
Muuttuja-arvot voivat olla alttiita vahingossa muutoksille. |
Käyttäjän määrittämät funktiot
Käyttäjät määrittämien funktioiden Power Apps Studio avulla voit luoda omia mukautettuja funktioita.
Kaava määritetään App.Formulas-ominaisuudessa seuraavasti:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Koodi toimii seuraavasti:
FunctionNamekäynnistää funktion.Parameteron syötteen nimi. Voit sisällyttää mukaan yhden tai useamman syötteen.DataTypeon tietotyyppi, jota funktioon välitettävän argumentin on vastattava. Käytettävissä olevia tietotyyppejä ovat esimerkiksi totuusarvo, väri, päivämäärä, päivämäärä/aika, dynaaminen tietotyyppi, GUID-tunnus, hyperlinkki, teksti ja aika.OutputDataTypeon funktion tuloksen tietotyyppi.Formulaon funktion ulostulo.
Käytä tätä IfError virheenkäsittelyn toteuttamiseen määritetyssä funktiossa:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Kutsu määritettyä funktiota teksti- tai otsikko-ohjausobjektista.
calcAreaOfCircle(Int(*TextInput1*.Text))
Muuttujien optimointi
Muuttujilla määritetään paikallisia ja yleisiä arvoja, joita käytetään kaikkialla sovelluksessa. Vaikka ne ovat käteviä, liian monien muuttujien käyttäminen voi heikentää sovelluksesi tehokkuutta.
Seuraavassa esimerkissä esitetään, miten objektin kullekin määritteelle määritetään muuttuja, mikä vaatii muuttujan Set käyttämistä kullekin ominaisuudelle.
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);
Tehokkaampi tapa on käyttää ominaisuutta vain silloin, kun sitä tarvitaan:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Kontekstimuuttujia ja yleisiä muuttajia on syytä käyttää harkiten. Jos muuttujan vaikutusalue ylittää yhden näytön, käytä yleisiä muuttujia kontekstimuuttujien sijaan.
Liian monet käyttämättömät muuttujat lisäävät muistin käyttöä ja voivat hidastaa sovelluksen alustamista. Resurssit varataan näille muuttujille, vaikka et käyttäisikään niitä. Käyttämättömät muuttujat lisäävät myös sovelluksen logiikan monimutkaisuutta. Pidä Power App siistinä ja järjestettynä suorituskyvyn parantamiseksi ja kehityksen helpottamiseksi.
Kokoelmien optimointi
Kokoelmat ovat väliaikaisia tietoja storage rakenteita, joita käytät tietojen tallentamiseen ja muokkaamiseen Power Apps-sovelluksessa. Kokoelmat voivat kuitenkin aiheuttaa suorituskykykuormituksia. Rajoita kokoelmien käyttöä ja käytä niitä vain tarvittaessa.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Jos haluat laskea paikallisen kokoelman tietueita, käytä määritettä CountIf määritteen Count(Filter()) sijaan.
Ota huomioon tämä menetelmä kokoelmia käsiteltäessä:
Kokoelmien koon ja määrän rajoittaminen. Koska kokoelmat ovat sovelluksen paikallisia, ne tallennetaan mobiililaitteen muistiin. Mitä enemmän tietokokoelmia on tai mitä enemmän kokoelmia käytät, sitä huonompi suorituskyky on. Käyttämällä
ShowColumns-funktiota saat vain tietyt sarakkeet. LisäämälläFilter-funktion saat ainoastaan merkityksellisiä tietoja.Seuraava esimerkkifunktio palauttaa koko tietojoukon:
ClearCollect(colDemoAccount, Accounts);Vertaa tätä funktiota seuraavaan koodiin, joka palauttaa vain tietyt tietueet ja sarakkeet:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Tämä esimerkki palauttaa seuraavan tietojoukon:
Tietolähteen päivitysvälin määrittäminen. Jos lisäät kokoelmaan uusia tietueita, päivitä se tai kerää siihen, jotta saat uudet tai muutetut tietueet. Jos useat käyttäjät päivittävät tietolähdettä, nouda uudet tai muutetut tietueet päivittämällä kokoelma. Mitä enemmän päivityskutsuja on, sitä enemmän palvelinta käytetään.
Kokoelmien ja muuttujien tietojen tallentaminen välimuistiin
Kokoelma on taulukkomuuttuja, joka tallentaa tietorivejä ja -sarakkeita, ei vain yksittäistä tietokohdetta. Kokoelmista on hyötyä kahdesta pääasiallisesta syystä: tietojen koostaminen ennen niiden lähettämistä tietolähteeseen ja tietojen tallentaminen välimuistiin toistuvien kyselyiden välttämiseksi. Koska kokoelmat vastaavat tietolähteen taulukkorakennetta ja Power Apps, niiden avulla voit käsitellä tietoja tehokkaasti myös ollessasi offline-tilassa.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Käyttämättömien muuttujien ja median poistaminen
Vaikka käyttämättömät tietovälineet ja muuttujat eivät välttämättä vaikuta merkittävästi sovelluksen suorituskykyyn, on tärkeää puhdistaa sovellus poistamalla käyttämättömät tietovälineet tai muuttujat.
Käyttämättömät mediatiedostot suurentavat sovelluksen kokoa, mikä voi hidastaa sovellusten latausaikoja.
Käyttämättömät muuttujat lisäävät muistin käyttöä ja voivat hidastaa sovelluksen alustamista hieman. Resurssit varataan näille muuttujille, vaikka niitä ei käytettäisi. Liian monta käyttämätöntä muuttujaa voi myös tehdä sovelluksen logiikasta monimutkaisemman.
Käyttämättömiä muuttujia ja mediaa voi tarkastella sovelluksen tarkistustoiminnolla.
Näyttöjen ja ohjausobjektien optimointi
Jos haluat optimoida näyttöjä ja ohjausobjekteja Power Apps, harkitse seuraavia parhaita käytäntöjä.
Vältä ohjausobjektien ristiviittauksia
Muissa näytöissä oleviin ohjausobjekteihin viittaavat ohjausobjektit voivat hidastaa sovelluksen latautumista ja sovelluksessa siirtymistä. Tämä lähestymistapa voi pakottaa sovelluksen lataamaan muut näytöt sen sijaan, että odottaisi, kunnes käyttäjä siirtyy kyseiseen näyttöön. Voit ratkaista tämän ongelman käyttämällä muuttujia, kokoelmia ja siirtymiskontekstia tilan jakamiseen eri näytöissä.
Power Apps Studion sovellusten tarkistustoiminto näyttää ohjausobjektit, joihin ristiinviitataan. Tarkista sovelluksen tarkistus säännöllisesti ongelman korjaamiseksi.
Seuraavassa kuvassa Valikoima 1 -ohjausobjektiin ristiinviitataan ohjausobjektissa Screen 2, Label 2.
Power Apps Studion
Jos viittaat ohjausobjektiin sovelluksen ensimmäisestä näytöstä toisessa näytössä, suorituskyky ei kärsi, koska ensimmäinen näyttö on jo ladattu. Tästä on itse asiassa hyötyä, koska sovellus on deklaratiivista muuttujien käyttämisen sijaan.
Jos viittaat ohjausobjekteihin, joita ei ole vielä ladattu, kuten ensimmäiseen näyttöön, joka viittaa ohjausobjektiin, joka on nimetty Label 3 näytöstä 3, sovellus lataa kyseisen näytön muistiin.
DelayOutput-ominaisuuden ottaminen käyttöön tekstiohjausobjekteissa
DelayOutput-asetus, jonka arvo on true, rekisteröi käyttäjän syötteen puolen sekunnin viiveen jälkeen. Tästä viiveestä on hyötyä kalliiden toimintojen lykkäämiseen, kunnes käyttäjä on kirjoittanut tekstin, kuten suodatuksen, kun syötettä käytetään muissa kaavoissa.
Otetaan esimerkiksi valikoima, jonka Kohteet suodatetaan sen mukaan, mitä käyttäjä on syöttänyt TextInput-ohjausobjektiin:
Jos määrität DelayOutput-ominaisuuden arvoksi epätosi, valikoima suodattaa heti, kun tekstiä on kirjoitettu. Jos sinulla on valikoima, jossa on useita kohteita, muutosten lataaminen uudelleen heti hidastaa suorituskykyä. Parempi odottaa. Tämä on käytännöllistä, kun käytät
TextInputhakumerkkijonoa tai funktiotaStartsWith.Jos määrität DelayOutput-ominaisuuden arvoksi true, muutosten havaitsemisessa on pieni viive. Tämä viive antaa aikaa kirjoittamisen loppuun suorittamiseen. Viive toimii hyvin ominaisuuden
TextInput.OnChangekanssa. Jos sinulla on muutoksiin sidottuja toimintoja, et halua niiden käynnistyvän ennen kuin lopetat kentän kirjoittamisen.
Delegointi ja palvelinpuolen käsittely
Delegoinnin ja palvelinpuolen käsittelyn avulla sovellus voi käsitellä suuria tietojoukkoja tehokkaasti poistamalla toiminnot tietolähteelle.
Delegointi
Power Apps delegointi viittaa sovelluksen kykyyn purkaa tietyt toiminnot pohjana olevaan tietolähteeseen sen sijaan, että toiminnot käsiteltäisiin Power Apps sisällä. Käyttämällä delegointia Power Apps voit luoda tehokkaampia ja skaalattavia sovelluksia, jotka toimivat hyvin myös suuriin tietojoukkoihin liittyvissä skenaarioissa. Ota huomioon delegoinnin rajoitukset tietyille tietolähteille ja toiminnoille ja suunnittele sovelluksesi siten optimaalisen suorituskyvyn saavuttamiseksi.
Muistiinpano
Kaikki funktiot eivät ole delegoitavia. Lue lisätietoja delegoinnista kyselyrajoituksista: Delegointi ja kyselyrajat.
Delegoinnilla on useita etuja, kuten kyselyn optimointi ja suurten tietojoukkojen tuki. Jos lähdetiedot lisäksi muuttuvat usein, delegointi auttaa pitämään tiedot ajan tasalla.
Tietolähteeseen tehtävien ohjelmointirajapintakutsujen vähentäminen
Joskus voi vaikuttaa kätevältä luoda kokoelmia suorittamalla liitoksia pohjaan perustuvassa sovelluksessa. Katso seuraavaa esimerkkiä. Esimerkissä on kaksi taulukkoa: Drivers ja Trucks. Koodi luo kuljettajien ja kuorma-autojen tietoja sisältävän kokoelman ja soittaa kunkin kuorma-auton osalta sen omistavalle kuljettajalle.
// 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)));
Tällaisen liitoksen suorittaminen pohjaan perustuvassa sovelluksessa voi luoda useita kutsuja tietolähteeseen, mikä johtaa hitaisiin latausaikoihin.
Parempi menetelmä:
// 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'
)
)
Reaaliaikaisessa skenaariossa voit lyhentää latausaikoja viidestä minuutista alle 10 sekuntiin korjaamalla lähteen tiedot.
Palvelinpuolen käsittely
Eri tietolähteet, kuten SQL ja Dataverse, mahdollistavat tietojen käsittelyn, kuten suodatuksen ja haun, delegoinnin tietolähteeseen. SQL Server voit luoda kyselyn määrittämiä näkymiä. Dataversessä voi luoda vähäisen koodin laajennuksia käsitelläksesi palvelimella olevia tietoja ja palauttaa ainoastaan lopputulokset pohjaan perustuvaan sovellukseen.
Tietojen käsittelyn delegointi palvelimelle voi parantaa suorituskykyä, vähentää asiakaspuolen koodia ja helpottaa sovelluksen ylläpitoa.
Lisätietoja Dataversen laajennuksista.
Kyselytietomallien optimointi
Optimoimalla sovelluksesi kyselytiedot voit merkittävästi lyhentää latausaikoja ja parantaa yleistä reagointia.
Käytä eksplisiittistä sarakevalintaa
Eksplisiittinen sarakkeiden valinta (ECS) -ominaisuus on oletusarvoisesti käytössä kaikissa uusissa sovelluksissa. Jos se ei ole käytössä sovelluksessasi, ota se käyttöön. ECS vähentää noudettavien sarakkeiden määrän automaattisesti vain sovelluksessa käytettäviin sarakkeisiin. Jos ECS ei ole käytössä, saatat saada enemmän tietoja kuin tarvitset, mikä voi vaikuttaa suorituskykyyn. Joskus, kun sovellus saa tietoja kokoelmien kautta, sarakkeen alkuperäinen lähde voi kadota. ECS pudottaa sarakkeita, jos se ei pysty määrittämään, että niitä käytetään. Jos haluat pakottaa ECS:n pitämään puuttuvan sarakkeen, käytä Power Fx -lauseketta ShowColumns kokoelmaviittauksen jälkeen tai ohjausobjektissa.
Vältä Power Automate kutsumista kokoelman täyttämiseksi
Yleinen käytäntö on noutaa ja täyttää kokoelmat Power Automate Power Apps. Vaikka tämä menetelmä on hyväksyttävä, se ei ole joissakin tilanteissa tehokkain vaihtoehto. Power Automate kutsuminen lisää verkkoviiveen ja 0,6 sekunnin suorituskykykustannukset Power Automate työnkulun alustamiseksi.
Power Automate työnkulkujen ylikäyttö voi johtaa myös suoritusrajoituksiin ja rajoittamiseen. Arvioi aina verkkoviiveen ja suorituskykykustannusten väliset kompromissit.
N+1 -ongelman poistaminen
N+1 -ongelma on yleinen tietokantakyselyissä, joissa kaikkien tarvittavien tietojen yhtenä kyselynä noutamisen sijaan liittyvien tietojen noutamista varten tehdään useita lisäkyselyjä. Tämä ongelma voi johtaa suorituskykyongelmiin, sillä jokainen ylimääräinen kysely aiheuttaa kuormituksia.
Kokoelman lataaminen yksinkertainen kutsu voi luoda N+1-kutsuja tietolähteeseen:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Kangassovellusten ja valikoimien yhteydessä saattaa tulla esiin N+1-ongelma, kun käsittelet tietolähteitä ja valikoimia, jotka näyttävät toisiinsa liittyviä tietueita. Ongelma esiintyy yleensä silloin, kun jokaiselle valikoimassa näkyvälle kohteelle tehdään lisää kyselyjä, mikä aiheuttaa suorituskyvyn pullonkaulan.
Käytä SQL Server Näytä objektit -komentoa, jos haluat välttää N+1-kyselyongelman, tai muuta käyttöliittymää, jotta N+1-skenaarion käynnistäminen ei käynnisty.
Dataverse noutaa liittyvien taulukoiden tarvittavat tiedot automaattisesti, ja sarakkeita voidaan valita liittyvistä taulukoista.
ThisItem.Account.'Account Name'
Jos RelatedDataSource koko on pieni (alle 500 tietuetta), tallenna se välimuistiin kokoelmaan ja käytä kokoelmaa Haku (N+1) -kyselyskenaarion ohjaamiseen.
Rajoita paketin kokoa
Vaikka Power Apps optimoi sovellusten lataamisen, voit ryhtyä toimiin vähentääksesi sovellustesi jalanjälkeä. Pienempi jalanjälki on erityisen tärkeä vanhempien laitteiden käyttäjille tai käyttäjille aluekohtaisissa laitteissa, joissa kaistanleveys on suurempi tai kaistanleveys pienempi.
Arvioi sovellukseen upotettua mediasisältöä. Jos jotakin ei käytetä, se kannattaa poistaa.
Esimerkiksi upotetut kuvat voivat olla liian suuria. Kannattaa selvittää, voiko PNG-tiedostojen sijaan käyttää SVG-kuvia. Ole varovainen, kun käytät tekstiä SVG-kuvissa, koska fontti on asennettava asiakasohjelmaan. Vaihtoehtoinen menetelmä tekstin näyttämiseen on lisätä tekstiotsikko kuvan päälle.
Arvioi, onko tarkkuus sopiva muototekijälle. Mobiilisovelluksen tarkkuuden ei tarvitse olla yhtä suuri kuin työpöytäsovelluksen. Kuvan laadun ja koon sopiva tasapaino löytyy kokeilemalla.
Jos joitakin näyttöjä ei käytetä, ne kannattaa poistaa. On kuitenkin on huolellinen sen suhteen, ettei mitään vain sovelluksen tekijöiden tai järjestelmänvalvojien käyttämiä piilotettua näyttöä poisteta.
Sen arviointi, yritetäänkö yhteen sovellukseen sovittaa liian monta työnkulkua. Onko samassa sovelluksessa esimerkiksi sekä järjestelmänvalvojan että asiakassovelluksen näytöt? Jos näin on, kannattaa harkita niiden jakamista erillisiksi sovelluksiksi. Tämän lähestymistavan ansiosta useiden ihmisten on myös helpompi työstää sovelluksia samanaikaisesti, ja se rajoittaa "räjähdyksen sädettä" (testauksen määrä), kun sovelluksen muutokset edellyttävät täyttä testiajoa.
ForAll-funktion optimointi
Power Apps ForAll-funktiolla toistetaan tietuetaulukko ja käytetään kaavaa tai kaavajoukkoa kuhunkin tietueeseen. Vaikka itse funktio on monipuolinen, funktion ForAll virheellinen käyttö voi nopeasti tehdä sovelluksestasi vähemmän suorituskykyisen.
Funktio ForAll on yksittäisjärjestyksessä oleva funktio samanaikaisen funktion sijaan. Näin ollen se tarkastelee vain yhtä tietuetta kerrallaan, saa tuloksen ja jatkaa sitten seuraavaan tietueeseen, kunnes se käy läpi kaikki sen vaikutusalueen tietueet.
Vältä sisäkkäin ForAll. Tämä käytäntö voi johtaa eksponentiaalisiin iteraatioihin ja vaikuttaa merkittävästi suorituskykyyn.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Tietokannan eräpäivitys
Voit käyttää -komentoa ForAll ja Patch -eräpäivitystä tietokannassa. Ole kuitenkin varovainen, kun käytät - ja ForAll-järjestystäPatch.
Seuraava funktio on parempi tapa, esimerkiksi:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
seuraava lähestymistapa on vähemmän tehokas:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);