PowerApps’te tuval uygulaması performansını iyileştirmeOptimize canvas-app performance in PowerApps

Microsoft, PowerApps platformunda çalıştırılan tüm uygulamaların performansını artırmak için var gücüyle çalışmaktadır.Microsoft is working hard to improve the performance of all apps that run on the PowerApps platform. Ancak oluşturduğunuz uygulamaların performansını artırmak için bu konudaki en iyi uygulamaları da izleyebilirsiniz.But you can follow the best practices in this topic to boost the performance of apps that you create.

Bir kullanıcı bir uygulamayı açtığında, herhangi bir kullanıcı arabirimini göstermeden önce şu yürütme aşamalarından geçer:When a user opens an app, it goes through these phases of execution before showing any user interface:

  1. Kullanıcının kimliğini doğrula - Söz konusu kişi uygulamayı daha önce hiç açmadıysa, kullanıcıdan uygulamanın gereksinim duyduğu bağlantılar için kimlik bilgileriyle oturum açmasını ister.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. Aynı kullanıcı uygulamayı tekrar açarsa, kuruluşun güvenlik ilkelerine bağlı olarak söz konusu kişiden tekrar bu istenebilir.If the same user opens the app again, that person might be prompted again, depending on the organization’s security policies.
  2. Meta verileri alır - Uygulamanın çalıştırıldığı PowerApps platformunun sürümü ve içinden verileri alması gereken kaynaklar gibi meta verileri alır.Gets metadata - Retrieves metadata such as the version of the PowerApps platform on which the app runs and the sources from which it must retrieve data.
  3. Uygulamayı başlatır - OnStart özelliğinde belirtilen görevleri gerçekleştirir.Initializes the app - Performs any tasks specified in the OnStart property.
  4. Ekranları işler - Uygulamanın verilerle doldurduğu denetimler içeren ilk ekranı işler.Renders screens - Renders the first screen with controls that the app has populated with data. Kullanıcı başka ekranları açarsa uygulama, aynı işlemi kullanarak bunları işler.If the user opens other screens, the app renders them by using the same process.

Veri bağlantılarını sınırlamaLimit data connections

Aynı uygulama içinden 30’dan fazla veri kaynağına bağlanmayın.Don’t connect to more than 30 data sources from the same app. Uygulamalar, yeni kullanıcılardan her bir bağlayıcıda oturum açmasını ister, bu nedenle her ek bağlayıcı, uygulamanın başlatılması için gereken süreyi uzatır.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. Bir uygulama çalıştırılırken her bağlayıcı, uygulama o kaynaktan veri istediğinde CPU kaynakları, bellek ve ağ bant genişliği gerektirir.As an app runs, each connector requires CPU resources, memory, and network bandwidth when the app requests data from that source.

Uygulamayı çalıştırırken Microsoft Edge veya Google Chrome’daki Geliştirici Araçları’nı açarak uygulamanızın performansını hızlıca ölçebilirsiniz.You can quickly measure your app’s performance by turning on Developer Tools in Microsoft Edge or Google Chrome while running the app. Uygulamanızı, Common Data Service, Azure SQL, SharePoint ve onedrive'da Excel gibi 30'dan fazla veri kaynaklarından veri sık isterse, verileri döndürmek için 15 saniyeden uzun olasılığı daha yüksektir.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.

Denetim sayısını sınırlamaLimit the number of controls

Aynı uygulamaya 500’den fazla denetim uygulamayın.Don’t add more than 500 controls to the same app. PowerApps, her bir denetimi işlemek için bir HTML DOM oluşturur.PowerApps generates an HTML DOM to render each control. Ne kadar çok denetim eklerseniz, PowerApps o kadar çok oluşturma süresine ihtiyaç duyar.The more controls you add, the more generation time PowerApps needs.

Tek tek denetimler yerine bir galeri kullanıyorsanız, bazı durumlarda, aynı sonucu elde edebilir ve uygulamanın daha hızlı başlatılmasını sağlayabilirsiniz.You can, in some cases, achieve the same result and have the app start faster if you use a gallery instead of individual controls. Ayrıca aynı ekrandaki denetim türü sayısını azaltmak da isteyebilirsiniz.In addition, you might want to reduce the number of control types on the same screen. Bazı denetimler (örneğin, PDF görüntüleyici, veri tablosu ve birleşik giriş kutusu), büyük yürütme betiklerini çeker ve işlenmesi uzun sürer.Some controls (such as PDF viewer, data table, and combo box) pull in large execution scripts and take longer to render.

OnStart işlevini iyileştirmeOptimize the OnStart function

Kullanıcı oturumu sırasında değişmiyorsa, verileri yerel olarak önbelleğe almak için ClearCollect işlevini kullanın.Use the ClearCollect function to cache data locally if it doesn’t change during the user session. Ayrıca veri kaynaklarını eş zamanlı olarak yüklemek için de Eş Zamanlı işlevini kullanın.Also, use the Concurrent function to load data sources simultaneously.

Bu başvuru konusunda da gösterildiği gibi, uygulamanın verileri yüklemesi için gereken süreyi yarıya indirmek için Eş Zamanlı seçeneğini kullanabilirsiniz.As this reference topic demonstrates, you can use Concurrent to cut the amount of time an app needs to load data in half.

Eş Zamanlı işlevi olmadan bu formül, dört tablonun her birini teker teker yükler: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]' )

Tarayıcınız için Geliştirici Araçları’nda bu davranışı doğrulayabilirsiniz:You can confirm this behavior in the Developer Tools for your browser:

Seri ClearCollect

İşlem için gereken genel süreyi azaltmak için Eş Zamanlı işlevinde aynı formüle yer verebilirsiniz: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]' ))
    

Bu değişiklikle uygulama, tabloları paralel olarak getirir:With this change, the app fetches the tables in parallel:

Paralel ClearCollect

Arama verilerini önbelleğe almaCache lookup data

Kaynaktan art arda veri alınmasını önlemek için arama tablolarından yerel olarak verileri önbelleğe almak için Set işlevini kullanın.Use the Set function to cache data from lookup tables locally to avoid repeatedly retrieving data from the source. Bu teknik, verilerin bir oturum sırasında değişmemesi durumunda performansı iyileştirir.This technique optimizes performance if the data probably won’t change during a session. Bu örnekte olduğu gibi veriler kaynaktan bir kez alınır ve sonra kullanıcı uygulamayı kapatıncaya kadar verilere yerel olarak başvurulur.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);

İletişim bilgileri, varsayılan değerler ve kullanıcı bilgileri sık sık değişmez.Contact information doesn’t change frequently, and neither do default values and user information. Bu nedenle bu tekniği genellikle Defaults ve User işlevleriyle de kullanabilirsiniz.So you can generally use this technique with the Defaults and User functions also.

Ekranlar arasındaki denetim bağımlılığını önlemeAvoid controls dependency between screens

Bir denetimin değeri, farklı bir ekrandaki bir denetimin değerine bağlıysa, bir değişken, koleksiyon veya veri kaynağı başvurusu kullanarak verileri yönetin.If a control’s value depends on the value of a control on a different screen, manage the data by using a variable, a collection, or a data-source reference.

Genel değişkenleri kullanmaUse global variables

Bir ekrandan diğerine uygulamanın durumunu geçirmek için, Navigate ve UpdateContext) işlevlerini kullanarak değil, Set işlevini kullanarak bir genel değişken değeri oluşturun veya değiştirin.To pass the app’s state from one screen to another, create or modify a global variable value by using the Set function instead of by using the Navigate and UpdateContext) functions.

Temsilci kullanmaUse delegation

Mümkünse, verileri işlenmek üzere yerel cihaza almak yerine veri işlemeyi veri kaynağına devreden işlevleri kullanın.Where possible, use functions that delegate data processing to the data source instead of retrieving data to the local device for processing. Bir uygulamanın verileri yerel olarak işlemesi gerekiyorsa, özellikle de veri kümesinin büyük olması durumunda işlem için çok daha fazla işlem gücü, bellek ve ağ bant genişliği gerekir.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.

Bu listede de gösterildiği gibi, farklı veri kaynakları, farklı işlevlerden temsilciyi destekler:As this list shows, different data sources support delegation from different functions:

Temsilci kullanma

Örneğin, SharePoint listeleri, Search işlevinden değil, Filter işlevinden temsilciyi destekler.For example, SharePoint lists support delegation from the Filter function but not the Search function. Bu nedenle, SharePoint listesi 500’den fazla öğe içeriyorsa, bir galerideki öğeleri bulmak için Search yerine Filter işlevini kullanmanız gerekir.So you should use Filter instead of Search to find items in a gallery if the SharePoint list contains more than 500 items. Daha fazla ipucu için bkz. PowerApps’te büyük SharePoint listeleriyle çalışma (blog gönderisi).For more tips, see Working with large SharePoint lists in PowerApps (blog post).

Gecikmeli Yükleme KullanmaUse Delayed Load

Uygulamanız 10’dan fazla ekran içeriyorsa, kural içermiyorsa ve birden çok ekranda bulunan ve doğrudan veri kaynağına bağlı olan birçok denetim içeriyorsa Gecikmeli Yükleme için deneysel özelliğini açın.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. Bu tür bir uygulama derleyip bu özelliği etkinleştirmezseniz, tüm ekranlardaki denetimlerin, açık olmayan ekranlarda bile doldurulmuş olması gerektiğinden uygulama performansı düşebilir.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. Ayrıca veri kaynağı her değiştiğinde, örneğin, kullanıcı bir kayıt eklediğinde, uygulamanın tüm ekranları güncelleştirilmelidir.Also, all screens of the app must be updated whenever the data source changes, such as when the user adds a record.

Büyük veri kümeleriyle çalışmaWorking with large data sets

Kullanıcılarınız ihtiyaç duydukları tüm bilgilere erişebilirken uygulamalarınızın yüksek performans göstermesini sağlamak için devredilebilecek veri kaynaklarını ve formülleri kullanın ve devredilemeyen sorgular için 2000 olan veri satırı sınırına ulaşmaktan kaçının.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. SQL Server ve SharePoint için bu belgelerde de açıklandığı gibi, kullanıcıların veri arayabileceği, filtreleyebileceği veya sıralayabileceği veri kaydı sütunları için bu sütun dizinleri düzgün şekilde tasarlanmıştır.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.

Uygulamaları düzenli olarak yeniden yayımlamaRepublish apps regularly

PowerApps platformundan ek özellikler ve performans artışı elde etmek için uygulamalarınızı yeniden yayımlayın (blog gönderisi).Republish your apps (blog post) to get performance improvements and additional features from the PowerApps platform.

Birden çok yerde aynı formülü yinelemekten kaçınınAvoid repeating the same formula in multiple places

Birden çok özellikleri (özellikle, karmaşık varsa) aynı formülü çalıştırırsanız, bir kez ayarlama ve ardından sonraki olanları ilk özelliğinde çıktısını başvuran göz önünde bulundurun.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. Örneğin, ayarlamamanız DisplayMode , denetimlerin A, B, C, D ve E aynı karmaşık formül olarak ayarlayın.For example, don't set the DisplayMode property of controls A, B, C, D and E to the same complex formula. Bunun yerine, A kümesi DisplayMode özelliği karmaşık bir formül olarak ayarlayın B'nin DisplayMode özellik A'ın sonucunu DisplayMode vb. için C, D ve E. özelliğiInstead, 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.

Tüm metin giriş denetimlerine DelayOutput etkinleştirEnable DelayOutput on all Text input controls

Birden çok formülleri veya değerini başvuran kurallar varsa bir metin girişi denetlemek için ayarlayın DelayedOutput true denetimin özellik.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. Metin denetimin özellik yalnızca sayfayı hızlı bir şekilde girilen tuş vuruşları ceased sonra güncelleştirilir.The Text property of that control will be updated only after keystrokes entered in quick succession have ceased. Formülleri veya kuralları olarak birden çok kez çalışmaz ve uygulama performansını iyileştirir.The formulas or rules won't run as many times, and app performance will improve.

Kuralları ve formülleri Form.Updates kullanmaktan kaçınınAvoid using Form.Updates in rules and formulas

Bir kullanıcı girişi değeri bir kural veya bir formül kullanarak başvuruyorsa bir Form.Updates değişken, form denetiminin veri kartlarını yinelenir ve her bir kayıt oluşturur.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. Uygulamanızı daha verimli hale getirmek için değeri doğrudan veri kartı ya da denetim değeri başvuru.To make your app more efficient, reference the value directly from the data card or the control value.

Sonraki adımlarNext steps

Gözden geçirme kod standartlarımız, koda uygulama performansını en üst düzeye ve uygulamaların bakımı kolay kalmasını sağlamak için.Review the coding standards for maximizing app performance and keeping apps easier to maintain.