Bina aplikasi kanvas yang besar dan kompleks

Kebanyakan artikel dalam bahagian dokumentasi ini merangkumi prestasi masa jalan aplikasi seperti yang dialami oleh orang yang menggunakannya. Artikel ini merangkumi prestasi aplikasi seperti yang dialami oleh orang yang membuatnya.

Apabila apl menjadi lebih besar dan lebih kompleks, Power Apps Studio perlu memuatkan dan mengurus bilangan kawalan, formula dan sumber data yang lebih besar, semuanya dengan saling bergantung yang berkembang dengan pesat. Power Apps Studio boleh mengambil masa yang lebih lama untuk dimuatkan, dan ciri-ciri seperti IntelliSense dan pengekodan warna boleh ketinggalan. Gunakan cadangan yang berikut untuk berfungsi dengan lebih baik dengan apl yang besar dan kompleks Power Apps Studio. Ia juga boleh membantu meningkatkan prestasi masa jalan apl anda.

Contoh dalam artikel ini menggunakan penyelesaian sampel respons Kecemasan Hospital.

Gunakan App.Formula selain daripada App.OnStart

Petua

Anda boleh menggunakan Dengan sifat output tersuai komponen fungsi dan kanvas sebagai alternatif kepada formula bernama.

Cara terbaik untuk mengurangkan masa memuatkan untuk kedua-duanya Power Apps Studio dan apl anda adalah untuk menggantikan permulaan pemboleh ubah dan koleksi dalam App.OnStart dengan formula bernama dalam App.Formulas.

Mari lihat contoh berikut, yang menggunakan App.OnStart.

// Get the color of text on a dark background.
Set(varColorOnDark,RGBA(0, 0, 0, 1));

// Get the color of the menu icons.
Set(varColorMenuIcon,"#0070a9");

// Get the styles for a form.
Set(varFormStyle,
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    }
);

ClearCollect(
    FacilitiesList,
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    )
);
If(
    Not IsBlank(Param("FacilityID")),
    Set(ParamFacility,
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name
    );
);

Oleh sebab ia merupakan jujukan pernyataan, apl anda mesti menilai pesanan Set dan Kumpul ini dengan teratur sebelum ia boleh memaparkan skrin pertama, yang menjadikan apl dimuatkan dengan lebih perlahan. Dan kerana keseluruhan App.OnStart mesti dipertimbangkan secara keseluruhan, pesanan dipelihara dan ralat diagregatkan sebelum mengembalikan hasil akhir, formula adalah rumit untuk Power Apps Studio dianalisis.

Ada cara yang lebih baik. Gunakan App.Formula sebaliknya dan takrifkan pemboleh ubah dan koleksi ini sebagai formula bernama, seperti dalam contoh berikut.

// Get the color of text on a dark background.
varColorOnDark = RGBA(0, 0, 0, 1);

// Get the color of the menu icons.
varColorMenuIcon = "#0070a9";

// Get the styles for a form.
varFormStyle = 
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    };

FacilitiesList =
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    );

ParamFacility = 
    If( Not IsBlank(Param("FacilityID")),
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name,
        Blank()
    );

Perubahan ini mungkin kelihatan kecil, tetapi ia boleh memberi kesan yang besar. Kerana setiap formula yang dinamakan adalah bebas daripada yang lain, Power Apps Studio boleh menganalisisnya secara bebas, dengan berkesan membahagikan App.OnStart yang besar kepada kepingan yang lebih kecil. Kami telah melihat Power Apps Studio penurunan masa beban sebanyak 80% dengan perubahan ini sahaja.

Apl anda juga dimuatkan dengan lebih cepat kerana ia tidak perlu menilai formula ini sehingga ia memerlukan hasilnya. Skrin pertama apl dipaparkan serta-merta.

Formula bernama tidak boleh digunakan dalam semua situasi kerana anda tidak boleh mengubah suainya atau menggunakannya dengan Set. Sesetengah situasi memerlukan penggunaan pembolehubah keadaan yang boleh diubah suai. Set sesuai untuk situasi ini dan anda harus terus menggunakannya. Tetapi, lebih kerap daripada tidak, anda menggunakan pemboleh ubah global dalam OnStart untuk menyediakan nilai statik yang tidak berubah. Dalam kes tersebut, formula bernama adalah pilihan yang lebih baik.

Oleh kerana formula yang dinamakan tidak boleh diubah, awalan var (pendek untuk "pemboleh ubah") sebagai konvensyen penamaan tidak lagi sesuai. Kami tidak menukar nama dalam contoh ini kerana ia memerlukan perubahan pada aplikasi yang lain untuk dipadankan.

Ia menggoda untuk meletakkan formula bernama dalam App.OnStart, tetapi tidak. Mereka tidak tergolong di sana. Sebagai sifat Pada tingkah laku, App.OnStart menilai setiap kenyataannya dengan teratur, mencipta pemboleh ubah global dan bercakap dengan pangkalan data sekali sahaja, apabila apl dimuatkan. Formula bernama ialah formula yang menentukan cara mengira sesuatu apabila diperlukan dan sentiasa benar. Sifat formula inilah yang membolehkan mereka berdikari dan membolehkan apl menyelesaikan pemuatan sebelum dinilai.

Pisahkan formula panjang

App.OnStart adalah salah satu pesalah terburuk untuk formula panjang dan pasti di mana anda harus bermula, tetapi ia bukan satu-satunya kes.

Kajian kami telah menunjukkan bahawa hampir semua aplikasi dengan masa muat yang panjang untuk Power Apps Studio mempunyai sekurang-kurangnya satu formula lebih daripada 256,000 aksara. Sesetengah apl dengan masa muat terpanjang mempunyai formula lebih daripada 1 juta aksara. Formula yang lama meletakkan ketegangan Power Apps Studio yang ketara.

Untuk memburukkan lagi keadaan, menyalin dan menampal kawalan dengan formula panjang menduplikasi formula dalam sifat kawalan tanpa ia direalisasikan. Power Apps dimodelkan selepas Excel, di mana berbilang salinan formula adalah perkara biasa. Walau bagaimanapun, dalam formula Excel terhad kepada satu ungkapan dan dihadkan pada 8,000 aksara. Power Apps Formula boleh berkembang lebih lama dengan pengenalan logik penting dan pengendali rantaian (; atau ;;, bergantung kepada penempatan).

Penyelesaian umum adalah untuk membahagikan formula panjang kepada bahagian yang lebih kecil dan menggunakan semula bahagian-bahagian, seperti yang kami lakukan dalam bahagian sebelumnya apabila kami mengubah/Penyata Set Kumpul dalam App.OnStart kepada formula bernama dalam App.Formulas. Dalam bahasa pengaturcaraan lain, bahagian yang boleh digunakan semula sering dirujuk sebagai subroutin atau fungsi takrifan pengguna. Anda boleh menganggap formula bernama sebagai bentuk ringkas fungsi takrifan pengguna tanpa parameter atau kesan sampingan.

Menggunakan formula bernama di mana-mana sahaja

Dalam contoh terdahulu, kami menggunakan formula bernama sebagai pengganti App.OnStart. Walau bagaimanapun, anda boleh menggunakannya untuk menggantikan pengiraan di mana-mana sahaja dalam apl.

Sebagai contoh, salah satu skrin dalam penyelesaian sampel respons Kecemasan Hospital termasuk logik ini dalam Screen.OnVisible:

ClearCollect(
    MySplashSelectionsCollection,
    {
        MySystemCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).System.'System Name',
        MyRegionCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).'Region Name',
        MyFacilityCol: ParamFacility,
          MyFacilityColID:  LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Id
    }
); 

Formula ini boleh dibahagikan kepada satu set formula bernama. Ia juga menjadikan formula lebih mudah dibaca.

MyRegion = LookUp(
                    Regions,
                    Region = MyParamRegion
           );

MyFacility = LookUp(
                    FacilitiesList,
                    Id = GUID(Param("FacilityID")
            );

MySplashSelectionsCollection = 
    {
        MySystemCol: MyRegion.System.'System Name',
        MyRegionCol: MyRegion.'Region Name',
        MyFacilityCol: ParamFacility,
        MyFacilityColID:  MyFacility.Id
    };

Kami mengekstrak ParamFacility sebagai formula bernama lebih awal apabila kami mengalihkan kebanyakan panggilan Set daripada App.OnStart kepada formula bernama dalam App.Formulas.

Formula bernama dinilai hanya apabila nilainya diperlukan. Jika niat asal menggunakan Screen.OnVisible adalah untuk menangguhkan kerja sehingga skrin ditunjukkan, maka kerja masih ditangguhkan sebagai formula bernama global dalam App.Formulas.

Gunakan fungsi Dengan

Anda juga boleh menggunakan fungsi Dengan dalam formula untuk memisahkan logik. Cipta rekod dalam parameter pertama dengan nilai yang anda ingin gunakan sebagai medan, kemudian gunakan medan tersebut dalam parameter kedua untuk mengira nilai kembali daripada Dengan. Sebagai contoh, contoh sebelumnya boleh ditulis sebagai hanya satu formula bernama:

MySplashSelectionsCollection = 
    With( { MyRegion: LookUp(
                            Regions,
                            Region = MyParamRegion
                      ),
            MyFacility: LookUp(
                            FacilitiesList,
                            Id = GUID(Param("FacilityID")
                      ) 
           },
           {
                MySystemCol: MyRegion.System.'System Name',
                MyRegionCol: MyRegion.'Region Name',
                MyFacilityCol: ParamFacility,
                MyFacilityColID:  MyFacility.Id
           }
    )

Satu kelemahan untuk menggunakan Dengan cara ini ialah yang MyFacility tidak boleh digunakan MyRegion kerana ia ditakrifkan dalam fungsi yang sama Dengan fungsi, masalah yang tidak hadir dengan formula bernama. Satu penyelesaian adalah untuk menyarangkan Dengan fungsi dan menggunakan kata kunci Sebagai untuk menamakan rekod bagi setiap untuk memberikan akses mudah kepada semua pemboleh ubah Dengan .

Gunakan komponen kanvas

Komponen kanvas paling kerap digunakan untuk mencipta kawalan UI yang boleh diletakkan pada kanvas sama seperti kawalan. Anda juga boleh menggunakannya tanpa meletakkannya dalam UI untuk melakukan pengiraan dengan sifat output tersuai sebagai alternatif kepada formula bernama. Komponen kanvas mudah dikongsi merentasi aplikasi dengan pustaka komponen dan, tidak seperti formula bernama, disokong sepenuhnya. Walau bagaimanapun, ia lebih sukar untuk dikonfigurasi dan digunakan daripada formula bernama.

Untuk memisahkan logik:

  1. Dalam Power Apps Studio, tukar kepada tab Komponen dalam pandangan Pohon.
  2. Cipta komponen baharu.
  3. Dalam anak tetingkap Sifat, hidupkan skop aplikasi Access.
  4. Tambah sifat tersuai.
  5. Setkan jenis Sifat kepada Output dan jenis Data mengikut kesesuaian.
  6. Pilih Cipta.
  7. Dalam pemilih hartanah di sebelah bar formula di bahagian atas skrin, pilih sifat baru.
  8. Tulis formula untuk logik berpecah dan gunakan semula.

Untuk menggunakan logik:

  1. Tukar kepada tab Skrin dalam pandangan Pohon.
  2. Dalam anak tetingkap Selitkan, kembangkan Tersuai dan selitkan komponen anda.
  3. Untuk mengira nilai dengan sifat, gunakan ComponentName.PropertyName.

Gunakan Pilih dengan kawalan tersembunyi untuk logik penting

Logik penting digunakan untuk mengubah keadaan dengan Set dan Kumpul , memberitahu pengguna dengan Beritahu , navigasi ke skrin atau aplikasi lain dengan Navigasi dan Pelancaran , dan tulis nilai ke pangkalan data dengan Patch , SubmitForm , atau RemoveIf . ·

Formula yang dinamakan dan sifat output tersuai komponen kanvas tidak menyokong logik penting. Cara biasa untuk membahagikan logik penting ialah menggunakan sifat OnSelect bagi kawalan tersembunyi.

  1. Tambah kawalan Butang pada skrin.
  2. Setkan sifat OnSelect kepada logik penting yang ingin anda laksanakan.
  3. Setkan sifat Boleh Dilihat kepada palsu, kerana pengguna tidak perlu melihat atau berinteraksi dengannya.
  4. Panggil Select( Button ) apabila anda ingin melaksanakan logik penting.

Sebagai contoh, salah satu skrin dalam sampel kami mempunyai sifat OnSelect berikut pada kawalan Butang . (Contoh mudah ini adalah untuk tujuan ilustrasi sahaja. Biasanya, anda hanya akan menggunakan teknik ini untuk formula yang lebih panjang.)

btnAction_17.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in the OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

Untuk membahagikan logik ini kepada beberapa bahagian, kita boleh meletakkan bahagian pada kawalan Butang berasingan dan Pilih mereka dari asal:

btnTrace.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);

btnSubmit.OnSelect = 
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

btnAction_17.OnSelect = 
    Select( btnTrace );
    Select( btnSubmit );

Teknik ini hanya berfungsi pada skrin yang sama. Teknik lain yang sedikit lebih rumit merentasi skrin, seperti menggunakan kawalan Togol, menetapkan OnCheck kepada logik yang anda mahu jalankan, dan menetapkan Lalai kepada pemboleh ubah global dan kemudian menukar pembolehubah global dengan Set( global, true ); Set( global, false ) pada ketika anda ingin menjalankan logik.

Dalam contoh ini, beberapa pemisahan logik telah dilakukan. Komen itu menyebut bahawa "Tindakan seterusnya boleh didapati di OnSuccess." Acara ini berjalan logik penting selepas rekod telah berjaya diserahkan, penyelesaian khusus untuk fungsi SubmitForm .

Bahagikan apl

Sesetengah apl berkembang kepada beribu-ribu kawalan dan beratus-ratus sumber data, yang melambatkan Power Apps Studio. Seperti formula panjang, aplikasi besar boleh dibahagikan kepada bahagian yang lebih kecil yang berfungsi bersama-sama untuk mencipta satu pengalaman pengguna.

Apl kanvas berasingan

Satu pendekatan ialah melaksanakan bahagian dalam aplikasi kanvas berasingan dan menggunakan fungsi Pelancaran untuk menavigasi antara aplikasi berasingan dan melepasi konteks yang diperlukan.

Pendekatan ini digunakan dalam penyelesaian sampel respons Kecemasan Hospital. Apl berasingan menguruskan setiap bidang utama apl keseluruhan. Apl berkongsi komponen papan suis biasa melalui pustaka komponen yang ditunjukkan oleh setiap apl pada skrin permulaannya:

Petikan skrin aplikasi kanvas penyelesaian respons Sampel Kecemasan Hospital berjalan pada telefon, menunjukkan komponen kanvas papan suis.

Apabila pengguna memilih kawasan, komponen menggunakan metadata tentang aplikasi yang tersedia dan aplikasi mana yang mengehoskan komponen. Jika skrin yang dikehendaki berada dalam aplikasi ini (iaitu,ThisItem.Screen · tidak kosong), maka panggilan Navigate dibuat. Tetapi jika skrin yang dikehendaki berada dalam aplikasi yang berbeza (iaitu,ThisItem.PowerAppID · tidak kosong), maka fungsi Pelancaran digunakan dengan ID Aplikasi sasaran dan konteks FacilityID:

If(
    IsBlank(ThisItem.Screen),
    If(IsBlank(ThisItem.PowerAppID), 
        Launch(ThisItem.URL),           
        Launch("/providers/Microsoft.PowerApps/apps/" & ThisItem.PowerAppID, 
               "FacilityID", Home_Facility_DD.Selected.Id)
    ),
    Navigate(
        ThisItem.Screen,
        Fade
    )
);

Nyatakan dalam apl asal hilang apabila apl lain dilancarkan. Pastikan anda menyimpan sebarang keadaan sebelum anda memanggil fungsi Pelancaran . Tuliskannya ke pangkalan data, hubungi SaveData, atau lulus keadaan ke aplikasi sasaran dengan parameter yang dibaca dengan fungsi Param .

Aplikasi berpandukan model dengan halaman tersuai

Seksyen juga boleh dilaksanakan sebagai halaman tersuai. Halaman tersuai bertindak sebagai aplikasi kanvas mini dengan bekas aplikasi berpandukan model untuk navigasi.

Nota

Adakah anda boleh memberitahu kami tentang keutamaan bahasa dokumentasi anda? Jawab tinjauan pendek. (harap maklum bahawa tinjauan ini dalam bahasa Inggeris)

Tinjauan akan mengambil masa lebih kurang tujuh minit. Tiada data peribadi akan dikumpulkan (pernyataan privasi).