Piirto alustan ja sovelluksen suoritus kyvyn optimointi Power AppsissaOptimize canvas-app performance in Power Apps

Microsoft työskentelee kovasti parantaakseen kaikkien Power apps-ympäristössä käytettävien sovellusten suoritus tehoa.Microsoft is working hard to improve the performance of all apps that run on the Power Apps platform. Tämän aiheen parhaiden käytäntöjen avulla voit myös tehostaa luomiesi sovellusten suorituskykyä.But you can follow the best practices in this topic to boost the performance of apps that you create.

Kun käyttäjä avaa sovelluksen, sovellus käy seuraavat suoritusvaiheet läpi, ennen kuin se avaa käyttöliittymän:When a user opens an app, it goes through these phases of execution before showing any user interface:

  1. Käyttäjän todentaminen - Jos käyttäjä ei ole avannut sovellusta aiemmin, sovellus kehottaa käyttäjää kirjautumaan sisään tunnistetiedoillaan sovelluksen tarvitsemia yhteyksiä varten.Authenticates the user - Prompts the user, if that person has never opened the app before, to sign in with credentials for whatever connections the app needs. Jos sama käyttäjä avaa sovelluksen uudelleen, hän saattaa joutua kirjautumaan sisään uudelleen organisaation suojauskäytäntöjen mukaisesti.If the same user opens the app again, that person might be prompted again, depending on the organization’s security policies.
  2. Hakee metatiedot – noutaa metatiedot, kuten sen Power apps-ympäristön versio, jossa sovellus suoritetaan, sekä lähteet, joista sen on noudettava tietoja.Gets metadata - Retrieves metadata such as the version of the Power Apps platform on which the app runs and the sources from which it must retrieve data.
  3. Sovelluksen alustaminen - Suorittaa kaikki OnStart-ominaisuudessa määritetyt tehtävät.Initializes the app - Performs any tasks specified in the OnStart property.
  4. Näyttöjen hahmontaminen - Hahmontaa ensimmäisen ohjausobjekteja sisältävän näytön, jonka sovellus on täyttänyt tiedoilla.Renders screens - Renders the first screen with controls that the app has populated with data. Jos käyttäjä avaa muita näyttöjä, sovellus hahmontaa ne käyttämällä samaa menetelmää.If the user opens other screens, the app renders them by using the same process.

Rajoita tietoyhteyksiäLimit data connections

Älä yhdistä yli 30 tietolähteeseen samassa sovelluksessa.Don’t connect to more than 30 data sources from the same app. Sovellus pyytää uusia käyttäjiä kirjautumaan sisään jokaiseen liittimeen, joten jokainen ylimääräinen liitin kasvattaa sovelluksen käynnistysaikaa.Apps prompt new users to sign in to each connector, so every additional connector increases the amount of time that the app needs to start. Kun sovellusta suoritetaan, jokainen liitin käyttää suoritinresursseja, muistia ja verkon kaistanleveyttä, kun sovellus pyytää tietoja kyseisestä tietolähteestä.As an app runs, each connector requires CPU resources, memory, and network bandwidth when the app requests data from that source.

Voit nopeasti mitata sovelluksesi suorituskykyä ottamalla käyttöön kehittäjätyökalut Microsoft Edgessä tai Google Chromessa sovelluksen suorittamisen aikana.You can quickly measure your app’s performance by turning on Developer Tools in Microsoft Edge or Google Chrome while running the app. Sovelluksesi vie todennäköisemmin yli 15 sekuntia aikaa tietojen palauttamiseen, jos se pyytää usein tietoja yli 30 tieto lähteestä, kuten Common Data Service, Azure SQL:stä, SharePointista ja Excelistä OneDrivessa.Your app is more likely to take longer than 15 seconds to return data if it frequently requests data from more than 30 data sources, such as Common Data Service, Azure SQL, SharePoint, and Excel on OneDrive.

Rajoita ohjausobjektien määrääLimit the number of controls

Älä lisää yli 500 ohjausobjektia samaan sovellukseen.Don’t add more than 500 controls to the same app. Power apps luo HTML-DOM-objektin kunkin ohjaus objektin hahmontamista varten.Power Apps generates an HTML DOM to render each control. Mitä enemmän ohjaus objektien lisääminen on, sitä enemmän suku polven ajan käyttö sovelluksia tarvitaan.The more controls you add, the more generation time Power Apps needs.

Voit joissakin tapauksissa saavuttaa saman lopputuloksen ja nopeuttaa sovelluksen käynnistymisaikaa, kun käytät valikoimaa yksittäisten ohjausobjektien sijaan.You can, in some cases, achieve the same result and have the app start faster if you use a gallery instead of individual controls. Lisäksi voit vähentää samassa näytössä käytettävien ohjausobjektityyppien määrää.In addition, you might want to reduce the number of control types on the same screen. Jotkin ohjausobjektit (kuten esimerkiksi PDF-katseluohjelma, tietotaulukko ja yhdistelmäruutu) vaativat suuria suorituskomentosarjoja, jolloin niiden hahmontamiseen kuluu enemmän aikaa.Some controls (such as PDF viewer, data table, and combo box) pull in large execution scripts and take longer to render.

Optimoi OnStart-funktioOptimize the OnStart function

ClearCollect-funktion avulla voit tallentaa tietoja välimuistiin paikallisesti, jos ne eivät muutu käyttäjäistunnon aikana.Use the ClearCollect function to cache data locally if it doesn’t change during the user session. Voit myös käyttää Concurrent-funktiota tietolähteiden lataamiseen samanaikaisesti.Also, use the Concurrent function to load data sources simultaneously.

Kuten tässä aiheessa esitellään, Concurrent-funktion avulla voit puolittaa ajan, jonka sovellus käyttää tietojen lataamiseen.As this reference topic demonstrates, you can use Concurrent to cut the amount of time an app needs to load data in half.

Ilman Concurrent-funktiota, tämä kaava joutuu lataamaan nämä neljä taulukkoa aina yksi kerrallaan:Without the Concurrent function, this formula loads each of four tables one at a time:

ClearCollect( Product, '[SalesLT].[Product]' );
ClearCollect( Customer, '[SalesLT].[Customer]' );
ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )

Voit varmistaa tämän toiminnan selaimesi kehittäjätyökalujen avulla:You can confirm this behavior in the Developer Tools for your browser:

Sarjoitettu ClearCollect

Voit sisällyttää saman kaavan Concurrent-funktioon vähentääksesi toiminnon vaatiman kokonaisajan:You can enclose the same formula in the Concurrent function to reduce the overall time that the operation needs:

Concurrent( 
    ClearCollect( Product, '[SalesLT].[Product]' ),
    ClearCollect( Customer, '[SalesLT].[Customer]' ),
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ))

Tämän muutoksen jälkeen sovellus noutaa taulukot rinnakkain:With this change, the app fetches the tables in parallel:

Rinnakkainen ClearCollect

Välimuistin hakutiedotCache lookup data

Käytä Joukko-funktiota tallentaaksesi hakutaulukkotietoja välimuistiin paikallisesti, jolloin et joudu toistuvasti noutamaan tietoja lähteestä.Use the Set function to cache data from lookup tables locally to avoid repeatedly retrieving data from the source. Tämä menetelmä auttaa optimoimaan suorituskykyä, jos tiedot eivät oletettavasti tule muuttumaan istunnon aikana.This technique optimizes performance if the data probably won’t change during a session. Kuten tässä esimerkissä näytetään, tiedot noudetaan lähteestä kerran, jonka jälkeen niihin viitataan paikallisesti siihen asti, kunnes käyttäjä sulkee sovelluksen.As in this example, the data is retrieved from the source once and then referenced locally after that until the user closes the app.

Set(CustomerOrder, Lookup(Order, id = “123-45-6789”));
Set(CustomerName, CustomerOrder.Name);
Set(CustomerAddress, CustomerOrder.Address);
Set(CustomerEmail, CustomerOrder.Email);
Set(CustomerPhone, CustomerOrder.Phone);

Yhteystiedot, oletusarvot ja käyttäjätiedot eivät muutu usein.Contact information doesn’t change frequently, and neither do default values and user information. Siksi voit yleisesti ottaen käyttää tätä menetelmää myös Defaults- ja Käyttäjä-funktioiden kanssa.So you can generally use this technique with the Defaults and User functions also.

Vältä näyttöjen välistä ohjausobjektiriippuvuuttaAvoid controls dependency between screens

Jos haluat parantaa suoritus tehoa, sovelluksen näytöt ladataan muistiin vain, kun niitä tarvitaan.To improve performance, the screens of an app are loaded into memory only as they are needed. Tämä optimointi voi vaikeutua, jos esimerkiksi näyttö 1 on ladattu ja jokin sen kaavoista käyttää ohjaus objektin ominaisuutta näytöstä 2.This optimization can be hampered if, for example, screen 1 is loaded and one of its formulas uses a property of a control from screen 2. Nyt näyttö 2 on ladattava riippuvuuden täyttämiseksi, ennen kuin näyttö 1 voidaan näyttää.Now screen 2 must be loaded to fulfill the dependency before screen 1 can be displayed. Imagine Screen 2: lla on riippuvuussuhde näytössä 3, jossa on toinen riippuvuus näytöstä 4 ja niin edelleen.Imagine screen 2 has a dependency on screen 3, which has another dependency on screen 4, and so on. Tämä riippuvuusketju voi aiheuttaa useiden näyttöjen lataamisen.This dependency chain can cause many screens to be loaded.

Tästä syystä Vältä kaavojen riippuvuuksia näyttöjen välillä.For this reason avoid formula dependencies between screens. Joissakin tapa uksissa voit käyttää yleistä muuttujaa tai kokoelmaa tietojen jakamiseen näyttöjen välillä.In some cases you can use a global variable or collection to share information between screens.

On olemassa poikkeus.There is an exception. Edellisessä esimerkissä voidaan kuvitella, että näyttö 1 voidaan näyttää vain siirtymällä näytöstä 2.In the previous example imagine that the only way to display screen 1 is by navigating from screen 2. Sitten näyttö 2 olisi jo ladattu muistiin, kun näyttö 1 ladattiin.Then screen 2 would have already been loaded in memory when screen 1 was to be loaded. Lisä työtä ei tarvita näytön 2 riippuvuuden täyttämiseksi, joten suoritus kyky ei ole vaikutusta.No additional work is needed to fulfill the dependency for screen 2 and therefore there's no performance impact.

Käytä delegointiaUse delegation

Mikäli mahdollista, käytä funktioita, jotka delegoivat tietojen käsittelyä tietolähteeseen sen sijaan, että ne noutaisivat tietoja paikallisen laitteen käsiteltäväksi.Where possible, use functions that delegate data processing to the data source instead of retrieving data to the local device for processing. Jos sovelluksen on käsiteltävä tietoja paikallisesti, toiminto vaatii paljon enemmän käsittelytehoa, muistia ja verkon kaistanleveyttä, erityisesti jos tietojoukko on suuri.If an app must process data locally, the operation requires much more processing power, memory, and network bandwidth, especially if the data set is large.

Kuten tämä luettelo osoittaa, eri tietolähteet tukevat eri toimintojen delegointia:As this list shows, different data sources support delegation from different functions:

Käytä delegointia

Esimerkiksi SharePoint-luettelot tukevat Suodatin-funktion delegointia mutta eivät Hae-funktion.For example, SharePoint lists support delegation from the Filter function but not the Search function. Tämä tarkoittaa siis sitä, että sinun kannattaa käyttää Suodatin-funktiota Haku-funktion sijaan, jos haluat löytää kohteita valikoimasta, jonka SharePoint-luettelo sisältää yli 500 kohdetta.So you should use Filter instead of Search to find items in a gallery if the SharePoint list contains more than 500 items. Lisä vihjeitä on artikkelissa Power Appsin suurten SharePoint-luetteloiden käsitteleminen (blogikirjoitus).For more tips, see Working with large SharePoint lists in Power Apps (blog post).

Käytä viivästettyä kuormitustaUse Delayed Load

Ota käyttöön kokeellinen ominaisuus viivästetty kuormitus, jos sovelluksesi sisältää yli 10 näyttöä, ei yhtään sääntöä ja useita ohjausobjekteja, jotka löytyvät usealta näytöltä ja jotka on sidottu suoraan tietolähteeseen.Turn on the experimental feature for Delayed Load if your app has more than 10 screens, no rules, and many controls that are on multiple screens and that are directly bound to the data source. Jos luot tämän tyyppisen sovelluksen ja et ota tätä ominaisuutta käyttöön, sovelluksen suorituskyky saattaa kärsiä, sillä jokaisen näytön ohjausobjekti on tuotava jokaiseen näyttöön silloinkin, kun ne eivät ole avoinna.If you build this type of app and don’t enable this feature, app performance may suffer because the controls in all screens must be populated even on screens that aren’t open. Lisäksi kaikki sovelluksen näytöt on päivitettävä aina, kun tietolähde muuttuu esimerkiksi silloin, kun käyttäjä lisää tietueen.Also, all screens of the app must be updated whenever the data source changes, such as when the user adds a record.

Suurten tietojoukkojen käsitteleminenWorking with large data sets

Käyttämällä delegoitavia tietolähteitä ja kaavoja voit varmistaa sovelluksesi toiminnan ja sen, että käyttäjäsi pääsevät aina käsiksi tarvitsemiinsa tietoihin. Samalla myös vältät 2 000 tietojen rivirajoituksen kyselyille, joita ei voi delegoida.Use data sources and formulas that can be delegated to keep your apps performing well while users can access all the information they need, and avoid hitting the data row limit of 2000 for non-delegable queries. Tietuesarakkeet, joita käyttäjät voivat käyttää tietojen hakemiseen, suodattamiseen tai lajitteluun, nämä sarakkeiden indeksit ovat suunniteltu SQL Serverille ja SharePointille, kuten näissä dokumenteissa kuvataan.For data-record columns on which users can search, filter, or sort data, those indexes of columns are designed well as these docs describe for SQL Server and SharePoint.

Julkaise sovelluksesi uudelleen säännöllisestiRepublish apps regularly

Julkaise sovelluksesi (blogikirjoitus) uudelleen, jotta saat suoritus kyky parannuksia ja lisä ominaisuuksia Power apps-ympäristöstä.Republish your apps (blog post) to get performance improvements and additional features from the Power Apps platform.

Vältä saman kaavan toistamista useissa paikoissaAvoid repeating the same formula in multiple places

Jos useita ominaisuuksia suoritetaan samalla kaavalla (etenkin jos se on monimutkainen), harkitse sen asettamista kerran ja viittaa sitten ensimmäisen ominaisuuden tulos teen myöhempiin ominaisuuksiin.If multiple properties run the same formula (especially if it's complex), consider setting it once and then referencing the output of the first property in subsequent ones. Älä esimerkiksi määrittää ohjaus objektien A, B, C, D ja E DisplayMode -ominaisuudeksi samaa monimutkaista kaavaa.For example, don't set the DisplayMode property of controls A, B, C, D and E to the same complex formula. Sen sijaan, Set A DisplayMode -ominaisuudeksi Complex Formula, Set B: n DisplayMode -ominaisuudeksi n DisplayMode -ominaisuuden tulos ja niin edelleen C, D ja E.Instead, set A's DisplayMode property to the complex formula, set B's DisplayMode property to the result of A's DisplayMode property, and so on for C, D, and E.

Ota DelayOutput käyttöön kaikissa teksti syöte ohjaus objekteissaEnable DelayOutput on all Text input controls

Jos sinulla on useita kaavoja tai sääntöjä, jotka viittaavat teksti syöte -ohjaus objektin arvoon, voit määrittää kyseisen ohjaus objektin Delayedoutput -ominaisuudeksi True.If you have multiple formulas or rules that reference the value of a Text input control, set the DelayedOutput property of that control to true. Ohjaus objektin Text -ominaisuus päivitetään vain, kun pikanäppäimen painallukset on lopetettu.The Text property of that control will be updated only after keystrokes entered in quick succession have ceased. Kaavoja tai sääntöjä ei suoriteta niin monta kertaa, ja sovelluksen suoritus kyky paranee.The formulas or rules won't run as many times, and app performance will improve.

Vältä lomakkeen käyttämistä. päivitykset sään töihin ja kaavoihinAvoid using Form.Updates in rules and formulas

Jos viittaat käyttäjän syöte arvoon säännössä tai kaavassa lomakkeen avulla. päivittää muuttujan, se iteroi kaikki lomakkeen tieto kortit ja luo tietueen joka kerta.If you reference a user-input value in a rule or a formula by using a Form.Updates variable, it iterates over all the form’s data cards and creates a record each time. Jos haluat tehostaa sovelluksesi käyttöä, viittaa arvoon suoraan tieto kortista tai ohjaus objektin arvosta.To make your app more efficient, reference the value directly from the data card or the control value.

Seuraavat vaiheetNext steps

Lue koodaus standardit , joiden avulla voit maksimoida sovelluksen suoritus tehon ja pitää sovelluksia helpommin ylläpidetä.Review the coding standards for maximizing app performance and keeping apps easier to maintain.