Kod iyileştirmesi

Tuval uygulamaları farklı iş gereksinimlerini karşılayacak şekilde geliştikçe, performansı en iyi şekilde tutmak kritik önem taşır. Veri işleme, kullanıcı arabirimi tasarımı ve uygulama işlevselliğinin tümü, kod optimizasyonu için dikkatli bir yaklaşım gerektirir.

Tuval uygulamaları daha karmaşık hale geldikçe veri alma, formül karmaşıklığı ve işleme hızıyla ilgili sorunlarla karşılaşabilirsiniz. Güçlü işlevselliği duyarlı bir kullanıcı arabirimiyle dengelemek için kod iyileştirmeye sistematik bir yaklaşım kullanın.

Power Fx formül iyileştirmesi

Bu bölümde Power Fx formüllerini iyileştirmeye yönelik en iyi yöntemler sağlanır.

With işlevi

With işlevi, tek bir kayıt için bir formülü değerlendirir. Formül bir değeri hesaplayabilir veya verileri değiştirmek veya bir bağlantıyla çalışmak gibi eylemler gerçekleştirebilir. Karmaşık formülleri daha küçük adlandırılmış alt formüllere bölerek okunmasını kolaylaştırmak için With'i kullanın. Bu adlandırılmış değerler, kapsamı With ile sınırlı basit yerel değişkenler gibi davranır. With bağlam veya genel değişkenlerden daha iyidir çünkü bağımsızdır, anlaşılması kolaydır ve bildirim temelli herhangi bir formül bağlamında çalışır. With işlevi hakkında daha fazla bilgi edinin.

With işlevini kullanan bir Power Fx formülünün ekran görüntüsü.

Eşzamanlı işlev

işlevi, Concurrent bağlayıcı veya Dataverse çağrıları varsa aynı özellikteki birden çok formülün aynı anda değerlendirilmesini sağlar. Normalde, birden fazla formülü ; (noktalı virgül) operatörüyle zincirlediğinizde aynı anda değerlendirilir. Concurrent ile uygulama, ; operatörü kullanıldıktan sonra bile, bir özellikteki tüm formülleri aynı anda değerlendirir. Bu eşzamanlılık, kullanıcıların sonuçlar için daha az zaman beklediği anlamına gelir. Önceki çağrılar bitmeden yeni veri çağrıları başlamadığında, uygulamanın tüm istek sürelerinin toplamı kadar bekler. Veri çağrıları aynı anda başlarsa, uygulama yalnızca en uzun isteğin süresi kadar bekler. Concurrent fonksiyonu hakkında daha fazla bilgi edinin.

Concurrent(
    ClearCollect(colAccounts1, Accounts),
    ClearCollect(colUsers1, Users),
    ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
    ClearCollect(colEnvVal1, 'Environment Variable Values')
);

Coalesce işlevi

Coalesce fonksiyonu argümanlarını sırayla değerlendirir ve boş olmayan ilk değeri veya boş bir dizeyi döndürür. Bu işlevi boş bir değeri veya boş dizeyi farklı bir değerle değiştirmek için kullanın ancak boş olmayan değer veya boş olmayan dize değerlerinde değişiklik yapmayın. Eğer tüm argümanlar boşsa veya boş dizelerse, fonksiyon boş değer döndürür. Coalesce boş dizeleri boş değerlere dönüştürmenin iyi bir yoludur. Coalesce işlevi hakkında daha fazla bilgi edinin.

Bu örnek için value1 ve value2 değerlerinin ikişer kez değerlendirilmesi gerekir.

If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)

Bu işlev aşağıdakilere indirgenebilir:

Coalesce(value1, value2)

IsMatch işlevi

IsMatch fonksiyonu, bir metin dizesinin sıradan karakterlerden oluşan bir desenle, önceden tanımlanmış desenlerle veya düzenli bir ifadeyle eşleşip eşleşmediğini test eder. IsMatch işlevi hakkında daha fazla bilgi edinin.

Örneğin, bu formül Amerika Birleşik Devletleri Sosyal Güvenlik numarasıyla eşleşir:

IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")

Normal ifadenin açıklaması:

  • \\d Herhangi bir basamakla (0-9) eşleşir.

  • {3} Önceki basamak desenin (\d) tam olarak üç kez gerçekleşmesi gerektiğini belirtir.

  • - Kısa çizgi karakteriyle eşleşir.

  • {2} Önceki basamak desenin (\d) tam olarak iki kez gerçekleşmesi gerektiğini belirtir.

  • {4} Önceki basamak desenin (\d) tam olarak dört kez gerçekleşmesi gerektiğini belirtir.

Daha fazla IsMatch örneği:

IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")

App OnStart işlevini iyileştirme

Tuval uygulamalarının OnStart özelliği, uygulama başlatıldığında gerçekleşen eylemleri tanımlamada önemli bir rol oynar. Bu özellik, uygulama geliştiricilerin genel başlatma görevlerini yürütmesine, değişkenler ayarlamasına ve yalnızca uygulamanın başlatma işlemi sırasında bir kez oluşması gereken eylemleri gerçekleştirmesine olanak tanır. Esnek ve verimli tuval uygulamaları oluşturmak için OnStart özelliğini anlayın ve etkili bir şekilde kullanın.

App.OnStart Değişken kurulumlarını adlandırılmış formüllere geçirerek işlevi kolaylaştırın. Adlandırılmış formüller, özellikle uygulama yaşam döngüsünün başlarında yapılandırılan formüller avantajlıdır. Bu formüller veri çağrılarına göre değişkenlerin başlatılmasını işleyerek kodunuz için daha temiz ve daha düzenli bir yapı sağlar. Daha fazla bilgi için bkz. Büyük ve karmaşık tuval uygulamaları oluşturma.

Uyarı

OnStart özelliği zorunludur. İlk ekran görünmeden önce yapılması gereken sıralı bir iş listesidir. Yalnızca yapılması gerekenler konusunda değil , aynı zamanda bu işin düzene göre yapılması gerektiğinde de çok özel olduğundan, aksi takdirde yapılabilecek yeniden sıralama ve erteleme iyileştirmelerini sınırlar.

Başlangıç ekranı

App.OnStart, Navigate fonksiyon çağrısı içeriyorsa bu fonksiyon bir If işlevi içinde olsa ve nadiren çağrılsa bile, uygulama ilk ekranını göstermeden önce App.OnStart işlevinin yürütülmesini tamamlamalıdır.  App.StartScreen , ilk olarak hangi ekranın gösterileceğini belirtmenin bildirim temelli bir yoludur ve iyileştirmeleri engellemez.

StartScreen özelliği ayarlandığında, ilk ekran App.OnStart tamamlanmadan önce gösterilir. App.StartScreen ön işleme gerektirmeden ilk olarak hangi ekran nesnesinin göstereceğini bildirir.

Aşağıdaki gibi bir kod yazmak yerine:

App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))

Kodu aşağıdaki gibi değiştirin:

App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)

Daha fazla bilgi: App.StartScreen: App.OnStart'ta Gezinmek için bildirim temelli bir alternatif.

Uyarı

StartScreen ve OnStart arasındaki bağımlılıklardan kaçının. Belirli bir formüle ve ardından bir genel değişkene başvurmak, StartScreen öğesinin doğru uygulanmamasına neden olabilecek bir yarış koşulu oluşturabilir.

ve StartScreenarasında OnStart bağımlılıklar oluşturmayın. Uygulama, StartScreen'daki genel değişkenleri doğrudan referans almayı engellerken, adlandırılmış bir formüle başvurabilirsiniz; bu formül de genel değişkene başvurur. Bu yaklaşım, StartScreen doğru şekilde uygulanmadığı bir yarış durumu yaratabilir.

Adlandırılmış formüller

Adlandırılmış formüller statik veya içinde App.Formulastanımlanabilir sabitlerdir. içinde App.Formulasbildirildikten sonra, bunlar uygulamanın herhangi bir yerinde kullanılabilir ve değerleri her zaman güncel kalır. Power Apps içindeki adlandırılmış formüller, platformun otomatik olarak yönettiği ve güncelleştirdiğini değerleri veya değer kümelerini tanımlamanıza olanak sağlar. Bu işlev, değer hesaplama ve bakım sorumluluğunu geliştiriciden Power Apps'e kaydırarak geliştirme sürecini hızlandırıyor. Power Apps'teki adlandırılmış formüller, uygulama performansını ve sürdürülebilirliğini önemli ölçüde geliştirebilen güçlü bir özelliktir.

Adlandırılmış formüller, uygulama temaları bildirildiğinde de yardımcı olur. Kurumsal uygulamalar oluştururken, genellikle uygulamanın tutarlı bir görünüm ve kullanıcı deneyimi sağlayan ortak temalara sahip olmasını istersiniz. Tema oluşturmak için içinde onlarca ile yüzlerce değişken App.OnStartbildirmeniz gerekir. Bu bildirim, kod uzunluğunu ve uygulamanın başlatma süresini artırır.

Modern denetimler, tema oluşturmada önemli ölçüde yardımcı olabilir ve tema oluşturmak üzere müşteri tarafından yazılan mantığın azaltılmasını sağlar. Modern denetimler şu anda önizleme aşamasındadır.

Örneğin, aşağıdaki kodu öğesine App.OnStartApp.Formulastaşıyabilirsiniz. Bu, genel değişken bildirimlerinde başlangıç süresini kısaltabilir.

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");

Kodu App.Formulas şu şekilde taşıyabilirsiniz:

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";

Başka bir örnek ise Lookups ayarındadır. Burada, dataverse yerine Office 365 kullanıcı bilgilerini almak için Lookup formülünde bir değişiklik yapılması gerekir. Kodu her yerde değiştirmeden değişikliği tek bir yerde yapmanız yeterlidir.

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');

Bu formüller hesaplamanın özünü barındırır. Değerlerine dayalı olarak UserEmail, UserInfo, UserTitle ve UserPhone belirleme sürecini ifade ederler. Mantığın kapsüllenmesi uygulama genelinde yaygın kullanım sağlar ve mantık tek bir konumda değiştirilebilir. Uyarlanabilirlik, uygulamaya dağılmış formüllerde değişiklik yapılmasını gerektirmeden Dataverse Users tablosundan Office 365 bağlayıcısına geçiş yapmaya kadar uzanır.

Bir diğer yaklaşım da countRows özelliğini iyileştirmektir.

varListItems = CountRows(SampleList)

Set işleviyle, değişkeni varListItems örnek listedeki ilk satır sayısıyla başlatmanız ve liste öğeleri eklendikten veya kaldırıldıktan sonra yeniden ayarlamanız gerekir. Adlandırılmış formüllerle, veriler değiştikçe varListItems değişken otomatik olarak güncelleştirilir.

özelliğindeki App.Formulas adlandırılmış formüller, uygulama genelindeki değerleri ve hesaplamaları yönetmek için daha esnek ve bildirim temelli bir yaklaşım sağlar. Zamanlama bağımsızlığı, otomatik güncelleştirmeler, bakım ve sabit tanımlar açısından yalnızca App.OnStart'a bağlı olana göre avantajlar sunarlar.

Aspect Adlandırılmış formüller (App.Formulas) App.OnStart
Zamanlama bağımsızlığı Formüller anında kullanılabilir ve herhangi bir sırada hesaplanabilir. Değişkenler kullanılabilirliği etkileyen zamanlama bağımlılıklarına neden olabilir.
Otomatik güncelleştirmeler Bağımlılıklar değiştiğinde formüller otomatik olarak güncelleştirilir. Değişkenler başlatma sırasında bir kez ayarlanır; el ile güncelleştirme gerekebilir.
Devamlılık Tek bir konumdaki merkezi formüller kullanılabilirliği artırır. Dağınık değişkenler birden çok yerde bulma ve güncelleştirme gerektirebilir.
Sabit tanımlar içindeki App.Formulas formül tanımları sabittir. Değişken değerleri yanlışlıkla yapılan değişikliklere karşı hassas olabilir.

Kullanıcı tanımlı işlevler

Power Apps Studio'daki kullanıcı tanımlı işlevler , kendi özel işlevlerinizi oluşturmanıza olanak tanır.

App.Formulas altında aşağıdaki şekilde bir formül tanımlayın:

FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula

Kod aşağıdaki gibi çalışır:

  • FunctionName işlevi çağırır.

  • Parameter girişin adıdır. Bir veya daha fazla giriş ekleyebilirsiniz.

  • DataType işlevine geçirilen bağımsız değişkenin eşleşmesi gereken veri türüdür. Kullanılabilir veri türleri arasında Boole, Renk, Tarih, Tarih Saat, Dinamik, GUID, Köprü, Metin ve Saat bulunur.

  • OutputDataType işlevin çıkışının veri türüdür.

  • Formula işlevin çıkışıdır.

Tanımlanan işlevde hata işlemeyi uygulamak için kullanın IfError :

// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number = 
    IfError(Pi() * radius * radius, 0);

Tanımlı işlevi bir metin veya etiket denetiminden çağırın.

calcAreaOfCircle(Int(*TextInput1*.Text))

Değişkenleri iyileştirme

Değişkenler, uygulamanız genelinde kullandığınız yerel ve genel değerleri tanımlar ve ayarlar. Kullanışlı olsalar da, çok fazla değişken kullanmak uygulamanızı daha az verimli hale getirebilir.

Aşağıdaki örnek, bir nesnenin her niteliği için bir değişkenin nasıl ayarlanacağını göstermektedir; bu da her özellik için Set kullanılmasını gerektirir.

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);

Daha verimli bir yaklaşım, özelliği yalnızca ihtiyacınız olduğunda kullanmaktır:

Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName

Bağlam değişkenlerini ve genel değişkenleri dikkatle kullanın. Bir değişkenin kapsamı tek bir ekranın ötesine geçiyorsa bağlam değişkenleri yerine genel değişkenleri kullanın.

Çok fazla kullanılmayan değişken bellek kullanımını artırır ve uygulamanın başlatılmasını yavaşlatabilir. Kaynaklar, siz kullanmasanız bile bu değişkenler için ayrılır. Kullanılmayan değişkenler de uygulamanızın mantığına karmaşıklık katar. Daha iyi performans ve daha kolay geliştirme için Power App'inizi temiz ve düzenli tutun.

Koleksiyonları iyileştirme

Koleksiyonlar, verileri bir Power Apps uygulamasında depolamak ve düzenlemek için kullandığınız geçici veri depolama yapılarıdır. Ancak, koleksiyonlar performans ek yüküne neden olabilir. Koleksiyon kullanımınızı sınırlayın ve yalnızca gerektiğinde kullanın.

// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});

// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});

Yerel bir koleksiyondaki kayıtları saymak için CountIf yerine Count(Filter()) kullanın.

Koleksiyonlarla çalışırken bu yaklaşımı göz önünde bulundurun:

  • Koleksiyonların boyutunu ve sayısını sınırlandırın. Koleksiyonlar uygulamada yerel olduğundan, mobil cihaz belleğinde depolanır. Ne kadar çok veri koleksiyonu tutulursa veya ne kadar çok koleksiyon kullanırsanız performans o kadar kötü olur. Sadece belirli sütunları almak için ShowColumns fonksiyonunu kullanın. Sadece ilgili verileri almak için Filter fonksiyonunu ekleyin.

    Aşağıdaki örnek işlev veri kümesinin tamamını döndürür:

    ClearCollect(colDemoAccount, Accounts);
    

    Bu işlevi yalnızca belirli kayıtları ve sütunları döndüren aşağıdaki kodla karşılaştırın:

    ClearCollect(colAcc,
      ShowColumns(
        Filter(Accounts, !IsBlank('Address 1: City')),
        "name","address1_city"))
    

    Bu örnek, aşağıdaki veri kümesini döndürür:

    colAcc adlı bir tablo ve address1_city ve ad olmak üzere iki sütun içeren bir veri kümesinin ekran görüntüsü.

  • Bir veri kaynağı yenileme sıklığı ayarlayın. Koleksiyona yeni kayıtlar eklerseniz, yeni veya değiştirilmiş kayıtları almak için koleksiyonu yenileyin veya toplayın. Veri kaynağınızı birden çok kullanıcı güncelleştirirse, yeni veya değiştirilmiş kayıtları almak için koleksiyonu yenileyin. Daha fazla yenileme çağrısı, sunucuyla daha fazla etkileşim anlamına gelir.

Koleksiyonlardaki ve değişkenlerdeki önbellek verileri

Koleksiyon, yalnızca tek bir veri öğesini değil, veri satırlarını ve sütunlarını depolayan bir tablo değişkenidir. Koleksiyonlar iki ana nedenden dolayı yararlıdır: verileri veri kaynağına göndermeden önce toplama ve sık sorgulardan kaçınmak için bilgileri önbelleğe alma. Koleksiyonlar veri kaynağının ve Power Apps'in tablosal yapısıyla eşleştiği için çevrimdışı olduğunuzda bile verilerle etkili bir şekilde etkileşim kurmanızı sağlar.

// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
    colEmployee,
    {
        Id: "1",
        Name: "John",
        Department: "IT"
    },
    {
        Id: "2",
        Name: "Nestor",
        Department: "IT"
    }
)

Kullanılmayan değişkenleri ve ortamları kaldırma

Kullanılmayan medya ve değişkenler uygulama performansını önemli ölçüde etkilemese de kullanılmayan medya veya değişkenleri kaldırarak uygulamanızı temizlemeniz önemlidir.

  • Kullanılmayan medya dosyaları uygulama boyutunu artırır ve bu da uygulama yükleme sürelerini yavaşlatabilir.

  • Kullanılmayan değişkenler bellek kullanımını artırır ve uygulamanın başlatılmasını biraz yavaşlatabilir. Kaynaklar, kullanılmasalar bile bu değişkenler için ayrılır. Çok fazla kullanılmayan değişken de uygulamanın mantığını daha karmaşık hale getirebilir.

  • Kullanılmayan ortamları ve değişkenleri gözden geçirmek için Uygulama Denetleyicisi'ni kullanın.

Ekranları ve denetimleri iyileştirme

Power Apps'daki ekranları ve denetimleri iyileştirmek için aşağıdaki en iyi yöntemleri göz önünde bulundurun.

Çapraz başvuru denetimlerinden kaçınma

Başka ekranlardaki denetimlere referans veren denetimler, uygulamanın yüklenmesini ve uygulamada gezinmeyi yavaşlatabilir. Bu yaklaşım, kullanıcı o ekrana gidene kadar beklemek yerine uygulamayı diğer ekranları yüklemeye zorlayabilir. Bu sorunu çözmek için değişkenleri, koleksiyonları ve gezinti bağlamını kullanarak durumu ekranlar arasında paylaşın.

Power Apps Studio'deki Uygulama denetleyicisi çapraz referanslı kontrolleri gösterir. Bu sorunu çözmek için Uygulama denetleyicisini düzenli olarak gözden geçirin.

Aşağıdaki görüntüde, Galeri 1 denetimi Ekran 2, Etiket 2 denetimi ile çapraz başvuru yapar.

Power Apps Studio'da çapraz referanslı bir denetimi gösteren ekran görüntüsü.

Uygulamanın ikinci ekranında, ilk ekrandaki bir denetime başvurursanız, ilk ekran zaten yüklü olduğundan performans düşüşü yaşanmaz. Bu davranış aslında yararlıdır çünkü uygulama değişkenleri kullanmak yerine bildirim temellidir.

Henüz yüklenmemiş denetimlere başvurursanız (örneğin, ilk ekran 3. ekrandan Label 3 adlı bir denetime başvurursa) uygulama o ekranı belleğe yükler.

Metin denetimleri için DelayOutput özelliğini etkinleştirme

DelayOutput ayarı true olarak ayarlandığında, yarım saniyelik bir gecikmeden sonra kullanıcı girişini kaydeder. Bu gecikme, kullanıcı diğer formüllerde giriş kullanıldığında filtreleme gibi metin girmeyi bitirene kadar pahalı işlemleri ertelemek için kullanışlıdır.

Örneğin, kullanıcının TextInput denetimine ne girdiğine bağlı olarak Öğeleri filtrelenmiş bir galeri düşünün:

  • DelayOutput değerini varsayılan değer olan false olarak ayarlarsanız, galeri herhangi bir metin yazıldığı anda filtrelenir. Çok sayıda öğe içeren bir galeriniz varsa, galeriyi değişikliklerle yeniden yüklemek performansı yavaşlatır. Beklemek daha iyi. Bu davranış, TextInput bir arama dizesi veya StartsWith işlevi kullanırken pratiktir.

  • DelayOutput değerini true olarak ayarlarsanız, değişiklikler algılanana kadar kısa bir gecikme olur. Bu gecikme, yazmayı tamamlamak için zaman sağlar. Gecikme özelliğiyle TextInput.OnChange iyi çalışır. Değişikliklere bağlı eylemleriniz varsa, alana yazmayı bitirene kadar bunların tetiklanmasını istemezsiniz.

Yetkilendirme ve sunucu tarafı işleme

Temsilci ve sunucu tarafı işlemeyi kullanmak, uygulamanızın işlemleri veri kaynağına boşaltarak büyük veri kümelerini verimli bir şekilde işlemesine olanak tanır.

Temsilci

Power Apps'te yetkilendirme, uygulamanın belirli işlemleri Power Apps içinde işlemek yerine, temel veri kaynağına devretme yeteneğini ifade eder. Power Apps'te temsilci seçme özelliğini kullanarak, büyük veri kümelerini içeren senaryolarda bile iyi performans gösteren daha verimli ve ölçeklenebilir uygulamalar oluşturabilirsiniz. Belirli veri kaynakları ve işlemler için temsilci sınırlamalarına dikkat edin ve en iyi performansı elde etmek için uygulamanızı uygun şekilde tasarlayın.

Uyarı

Tüm işlevler devredilebilir değildir. Sorgu sınırlamaları: Temsilci seçme ve sorgu sınırları bölümünde temsilci seçme hakkında daha fazla bilgi edinin.

Temsilcinin sorgu iyileştirme ve büyük veri kümeleri için destek gibi birçok avantajı vardır. Ayrıca, kaynak verileri sık sık değişiyorsa, yetkilendirme verilerin güncel kalmasına yardımcı olur.

Veri kaynağına yapılan API çağrılarını azaltma

Bazen, tuval uygulamanız içinde birleştirmeler gerçekleştirerek koleksiyonlar oluşturmak uygun görünebilir. Aşağıdaki örneği dikkate alın. Örnekte iki tablo vardır: Sürücüler ve Kamyonlar. Kod, sürücülerin ve kamyon ayrıntılarının bir koleksiyonunu oluşturur ve her kamyon için kamyonun sahibi olan sürücüyü arar.

// 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)));

Tuval uygulaması içinde bu tür bir birleştirme gerçekleştirmek, veri kaynağına çok sayıda çağrı oluşturabilir ve bu da yükleme sürelerinin yavaşlamasına neden olur.

Daha iyi bir yaklaşım şöyledir:

// 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'
    )
)

Gerçek zamanlı senaryoda, kaynaktaki verileri düzelterek yükleme sürelerini beş dakikadan 10 saniyenin altına düşürebilirsiniz.

Sunucu tarafı işleme

SQL ve Dataverse gibi farklı veri kaynakları, filtreler ve aramalar gibi veri işlemelerini veri kaynağına devretmenize olanak tanır. SQL Server'da, bir sorgu tarafından tanımlanan görünümler oluşturabilirsiniz. Dataverse'de, sunucudaki verileri işleyip yalnızca nihai sonuçları tuval uygulamanıza döndürecek düşük kodlu eklentiler oluşturabilirsiniz.

Veri işlemeyi sunucuya devretmek performansı artırabilir, istemci tarafı kodunu azaltabilir ve uygulamanızın bakımını kolaylaştırabilir.

Dataverse'te eklentiler hakkında daha fazla bilgi edinin.

Sorgu veri kalıplarını iyileştirme

Uygulamanızın veri sorgulama yöntemlerini optimize etmek, yük sürelerini önemli ölçüde azaltabilir ve genel yanıt verme hızını artırabilir.

Açık sütun seçimini kullanma

Açık Sütun Seçimi (ECS) özelliği tüm yeni uygulamalar için varsayılan olarak açıktır. Uygulamanız için açık değilse açın. ECS, getirilen sütunları otomatik olarak yalnızca uygulamada kullanılanlarla sınırlandırır. ECS açık değilse, ihtiyacınız olandan daha fazla veri alabilirsiniz ve bu da performansı etkileyebilir. Bazen, bir uygulama koleksiyonlar aracılığıyla veri aldığında, bir sütunun orijinal kaynağı kaybolabilir. ECS, kullanıldıklarını belirleyemezse sütunları bırakır. ECS'yi eksik bir sütunu tutmaya zorlamak için, bir koleksiyon başvurusundan sonra veya denetimde Power Fx ifadesini ShowColumns kullanın.

Bir koleksiyonu doldurmak için Power Automate çağrısı yapmaktan kaçınma

Power Apps'te koleksiyonları almak ve doldurmak için Power Automate kullanmak yaygın bir uygulamadır. Bu geçerli bir yaklaşım olsa da en etkili seçenek olmadığı durumlar olabilir. Power Automate'ı çağırmak, Power Automate akışını başlatmak için ağ gecikmesi ve 0,6 saniyelik bir performans maliyeti ekler.

Power Automate akışlarının aşırı kullanılması, yürütme sınırlarına ve kısıtlamaya yol açabilir. Ağ gecikme süresi ile performans maliyeti arasındaki dengeleri her zaman değerlendirin.

N+1 problemini ortadan kaldırma

N+1 problemi gerekli tüm verileri tek bir sorguyla almak yerine, ilgili verileri almak için birden çok ek sorgu yapılan veritabanı sorgularında yaygın bir sorundur. Her ek sorgu ek yüke neden olduğundan bu sorun performans sorunlarına yol açabilir.

Bir koleksiyonu yüklemek için aşağıdaki gibi basit bir çağrı, veri kaynağına N+1 çağrıları oluşturabilir:

ClearCollect(MyCollection, OrdersList,
    {
        LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
    }
)

Tuval uygulamaları ve galeriler bağlamında, ilgili kayıtları görüntüleyen veri kaynakları ve galerilerle çalışırken N+1 sorunu ortaya çıkabilir. Bu sorun genellikle galeride görüntülenen her öğe için daha fazla sorgu yapılması nedeniyle performans zorlandığında ortaya çıkar.

N+1 sorgu problemini önlemek için SQL Server'da Nesneleri görüntüle seçeneğini kullanın veya N+1 senaryosunu tetiklemekten kaçınmak üzere kullanıcı arabirimini değiştirin.

Dataverse, ilgili tabloların gerekli verilerini otomatik olarak alır ve ilgili tablolardan sütunlar seçebilirsiniz.

ThisItem.Account.'Account Name'

Boyut küçükse RelatedDataSource (500'den az kayıt), bunu bir koleksiyonda önbelleğe alın ve arama (N+1) sorgu senaryosunu yönlendirmek için koleksiyonu kullanın.

Paket boyutunu sınırlama

Power Apps uygulama yüklemesini iyileştirse de, uygulamalarınızın ayak izini azaltmak için adımlar atabilirsiniz. Azaltılmış bir ayak izi, özellikle eski cihazların kullanıcıları veya gecikme süresinin daha yüksek ya da bant genişliğinin düşük olduğu bölgelerdeki kullanıcılar için önemlidir.

  • Uygulamanıza eklenmiş medyayı değerlendirin. Kullanılmayan öğeleri silin.

    Örneğin, eklenmiş görüntüler çok büyük olabilir. PNG dosyaları yerine, SVG görüntüleri kullanıp kullanmayabileceğinize bakın. Yazı tipinin istemciye yüklenmesi gerektiğinden, SVG görüntülerinde metin kullanma konusunda dikkatli olun. Metni göstermeniz gerektiğinde geçici bir çözüm, bir metin etiketinin yerine bir resim eklemektir.

  • Çözünürlüğün form faktörü için uygun olup olmadığını değerlendirin. Bir mobil uygulamanın çözünürlüğünün masaüstü uygulama kadar yüksek olması gerekmez. Görüntü kalitesi ve boyutunda doğru dengeyi elde etmek için denemeler yapın.

  • Kullanılmayan ekranlarınız varsa, bunları silin. Yalnızca uygulama oluşturucuların veya yöneticilerin kullandığı gizli ekranları silmemeye dikkat edin.

  • Tek bir uygulamaya çok fazla iş akışı sığdırmaya çalışıp çalışmadığınıza bakın. Örneğin, aynı uygulamada hem yönetici ekranlarınız hem de istemci ekranlarınız var mı? Varsa, bunları ayrı ayrı uygulamalara bölün. Bu yaklaşım aynı anda birden çok kişinin uygulamalar üzerinde çalışmasını kolaylaştırır ve uygulama değişiklikleri tam test geçişi gerektirdiğinde "patlama yarıçapını" (test miktarı) sınırlar.

ForAll işlevini iyileştirme

Power Apps'daki ForAll işlevi, bir kayıt tablosunda yineleme yapmak ve her kayda bir formül veya formül kümesi uygulamak için kullanılır. İşlevin kendisi çok yönlü olsa da, işlevin ForAll yanlış kullanılması uygulamanızı hızla daha az performanslı hale getirir.

ForAll işlevi, eşzamanlı bir işlev yerine sıralı tek bir işlevdir. Bu nedenle, her seferinde yalnızca bir kaydı inceler, sonucu alır ve ardından kapsamındaki tüm kayıtları geçene kadar bir sonraki kayda geçer.

İç içe ForAll yerleştirmeyi önleyin. Bu uygulama üstel yinelemelere yol açabilir ve performansı önemli ölçüde etkileyebilir.

ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))

Veritabanını toplu güncelleştirme

Veritabanını toplu olarak güncelleştirmek için ForAll ve Patch kullanabilirsiniz. Ancak ForAll ve Patch sırasını kullanırken dikkatli olun.

Aşağıdaki işlev daha iyi bir yaklaşımdır, örneğin:

Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
    {
        demoName:"fromCanvas2"
    })
);

Ancak aşağıdaki yaklaşım daha az verimlidir:

ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
    {
        demoName:"test"
    })
);

Sonraki adım