Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Memandangkan apl kanvas berkembang untuk memenuhi keperluan perniagaan yang berbeza, memastikan prestasi optimum adalah penting. Pengendalian data, reka bentuk antara muka pengguna dan fungsi apl semuanya memerlukan pendekatan yang teliti terhadap pengoptimuman kod.
Apabila apl kanvas menjadi lebih kompleks, anda boleh menghadapi masalah dengan pengambilan data, kerumitan formula dan kelajuan rendering. Untuk mengimbangi fungsi yang kukuh dengan antara muka pengguna yang responsif, gunakan pendekatan sistematik untuk pengoptimuman kod.
Pengoptimuman formula Power Fx
Bahagian ini menyediakan amalan terbaik untuk mengoptimumkan formula Power Fx.
Dengan fungsi
Fungsi ini With menilai formula untuk satu rekod. Formula boleh mengira nilai atau melakukan tindakan, seperti mengubah suai data atau bekerja dengan sambungan. Gunakan With untuk menjadikan formula kompleks lebih mudah dibaca dengan membahagikannya kepada subformula bernama yang lebih kecil. Nilai yang dinamakan ini bertindak seperti pembolehubah tempatan mudah terhad kepada skop With.
With adalah lebih baik daripada konteks atau pembolehubah global kerana ia serba lengkap, mudah difahami dan berfungsi dalam mana-mana konteks formula deklaratif. Ketahui lebih lanjut tentang fungsi Dengan.
Fungsi serentak
Fungsi ini Concurrent membolehkan berbilang formula dalam sifat yang sama dinilai pada masa yang sama jika ia mempunyai penyambung atau panggilan Dataverse. Biasanya, berbilang formula dinilai pada masa yang sama apabila anda merantaikannya dengan ; pengendali (titik koma). Dengan Concurrent, apl menilai semua formula dalam sifat pada masa yang sama, walaupun selepas menggunakan ; pengendali. Serentak ini bermakna pengguna menunggu lebih sedikit masa untuk keputusan. Apabila panggilan data tidak bermula sehingga panggilan sebelumnya tamat, apl menunggu jumlah semua masa permintaan. Jika panggilan data bermula pada masa yang sama, apl hanya menunggu masa permintaan yang paling lama. Ketahui lebih lanjut tentang fungsi Serentak.
Concurrent(
ClearCollect(colAccounts1, Accounts),
ClearCollect(colUsers1, Users),
ClearCollect(colEnvDef1, 'Environment Variable Definitions'),
ClearCollect(colEnvVal1, 'Environment Variable Values')
);
Fungsi penyatuan
Fungsi ini Coalesce menilai argumennya mengikut urutan dan mengembalikan nilai pertama yang tidak kosong atau rentetan kosong. Gunakan fungsi ini untuk menggantikan nilai kosong atau rentetan kosong dengan nilai yang berbeza, tetapi biarkan nilai rentetan tidak kosong dan tidak kosong tidak berubah. Jika semua hujah kosong atau rentetan kosong, fungsi mengembalikan kosong.
Coalesce ialah cara yang baik untuk menukar rentetan kosong kepada nilai kosong. Ketahui lebih lanjut tentang fungsi Coalesce.
Contoh ini memerlukan value1 dan value2 dinilai dua kali:
If(Not IsBlank(value1), value1, Not IsBlank(value2), value2)
Fungsi ini boleh dikurangkan kepada:
Coalesce(value1, value2)
Fungsi IsMatch
Fungsi ini IsMatch menguji jika rentetan teks sepadan dengan corak yang terdiri daripada aksara biasa, corak yang telah dipratakrifkan atau ungkapan biasa. Ketahui lebih lanjut tentang fungsi IsMatch.
Sebagai contoh, formula ini sepadan dengan nombor Keselamatan Sosial United States:
IsMatch(TextInput1.Text, "\d{3}-\d{2}-\d{4}")
Penjelasan ungkapan biasa:
\\dSepadan dengan mana-mana digit (0-9).{3}Menentukan bahawa corak digit sebelumnya (\d) hendaklah berlaku tepat tiga kali.-Sepadan dengan aksara sempang.{2}Menentukan bahawa corak digit sebelumnya (\d) hendaklah berlaku tepat dua kali.{4}Menentukan bahawa corak digit sebelumnya (\d) hendaklah berlaku tepat empat kali.
Lebih banyak contoh IsMatch:
IsMatch(TextInput1.Text, "Hello World")
IsMatch(TextInput1\_2.Text, "(?!^\[0-9\]\\\*$)(?!^\[a-zA-Z\]\\\*$)(\[a-zA-Z0-9\]{8,10})")
Optimumkan apl OnStart
OnStart Sifat untuk aplikasi kanvas memainkan peranan penting dalam mentakrifkan tindakan yang berlaku apabila aplikasi dilancarkan. Sifat ini membolehkan pembangun apl melaksanakan tugas permulaan global, menyediakan pembolehubah dan melaksanakan tindakan yang sepatutnya berlaku sekali sahaja semasa proses permulaan apl. Fahami dan gunakan sifat dengan OnStart berkesan untuk mencipta apl kanvas yang responsif dan cekap.
Perkemas App.OnStart fungsi dengan memindahkan persediaan pembolehubah kepada formula bernama. Formula bernama, terutamanya formula yang dikonfigurasikan pada awal kitaran hayat apl, adalah berfaedah. Formula ini mengendalikan permulaan pembolehubah berdasarkan panggilan data, menyediakan struktur yang lebih bersih dan teratur untuk kod anda. Ketahui lebih lanjut dalam Bina apl kanvas yang besar dan kompleks.
Nota
Harta OnStart itu penting. Ia adalah senarai kerja yang tersusun yang perlu dilakukan sebelum skrin pertama muncul. Oleh kerana ia sangat spesifik bukan sahaja tentang perkara yang perlu dilakukan, tetapi juga apabila kerja itu mesti dilakukan berdasarkan pesanan, ia mengehadkan penyusunan semula dan penangguhan pengoptimuman yang mungkin dilakukan.
Mulakan skrin ini
Jika App.OnStart mengandungi Navigate panggilan fungsi, walaupun ia berada dalam If fungsi dan jarang dipanggil, apl mesti melengkapkan pelaksanaan App.OnStart sebelum ia menunjukkan skrin pertama apl.
App.StartScreen ialah cara deklaratif untuk menunjukkan skrin mana yang harus ditunjukkan terlebih dahulu dan ia tidak menyekat pengoptimuman.
Menetapkan StartScreen sifat menunjukkan skrin pertama sebelum App.OnStart selesai.
App.StartScreen Mengisytiharkan objek skrin yang hendak dipaparkan terlebih dahulu tanpa memerlukan sebarang prapemprosesan.
Daripada menulis kod seperti:
App.OnStart = Collect(OrdersCache, Orders);
If(Param("AdminMode") = "1", Navigate(AdminScreen), Navigate(HomeScreen))
Tukar kod kepada:
App.OnStart = Collect(OrdersCache, Orders);
App.StartScreen = If(Param("AdminMode") = "1", AdminScreen, HomeScreen)
Maklumat lanjut: App.StartScreen: alternatif deklaratif kepada Navigasi dalam App.OnStart.
Amaran
Elakkan pergantungan antara StartScreen dan OnStart. Merujuk formula bernama yang seterusnya merujuk pembolehubah global mungkin menyebabkan keadaan perlumbaan yang StartScreen tidak digunakan dengan betul.
Jangan cipta kebergantungan antara StartScreen dan OnStart. Walaupun apl menyekat rujukan pembolehubah global dalam StartScreen, anda boleh merujuk formula bernama, yang seterusnya merujuk pembolehubah global. Pendekatan ini mungkin menyebabkan keadaan perlumbaan di mana ia StartScreen tidak digunakan dengan betul.
Formula bernama
Formula bernama ialah statik atau pemalar yang boleh ditakrifkan dalam App.Formulas. Setelah diisytiharkan dalam App.Formulas, ia boleh digunakan di mana-mana sahaja dalam apl dan nilainya sentiasa dikemas kini. Formula bernama dalam Power Apps membolehkan anda mentakrifkan nilai atau set nilai yang diuruskan dan dikemas kini oleh platform secara automatik. Fungsi ini mengalihkan tanggungjawab pengiraan dan penyelenggaraan nilai daripada pembangun kepada Power Apps, menyelaraskan proses pembangunan. Formula bernama dalam Power Apps ialah ciri berkuasa yang boleh meningkatkan prestasi dan kebolehselenggaraan apl dengan ketara.
Formula bernama juga membantu apabila mengisytiharkan tema apl. Apabila anda membina apl perusahaan, anda selalunya mahu apl mempunyai tema biasa yang memberikan rupa dan pengalaman pengguna yang konsisten. Untuk membuat tema, anda perlu mengisytiharkan puluhan hingga beratus-ratus pembolehubah dalam App.OnStart. Pengisytiharan ini meningkatkan panjang kod dan masa permulaan apl.
Kawalan moden juga boleh membantu dengan ketara dengan tema dan membantu mengurangkan logik bertulis pelanggan untuk mengendalikan tema. Kawalan moden kini dalam pratonton.
Sebagai contoh, anda boleh mengalihkan kod App.OnStart berikut ke App.Formulas, yang mengurangkan masa permulaan pada pengisytiharan pembolehubah global.
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");
Anda boleh mengalihkan kod kepada App.Formulas seperti berikut:
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";
Contoh lain ialah dalam tetapan Lookups. Di sini, perubahan diperlukan dalam formula Lookup untuk mendapatkan maklumat pengguna daripada Office 365 dan bukannya Dataverse. Anda hanya perlu membuat perubahan di satu tempat, tanpa menukar kod di mana-mana.
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');
Formula ini merangkumi intipati pengiraan. Mereka menyatakan proses untuk menentukan UserEmail, UserInfo, UserTitle, dan UserPhone berdasarkan nilai lain. Logik ini dirangkum, membolehkan penggunaan meluas di seluruh apl dan boleh diubah suai di lokasi tunggal. Kebolehsuaian meluas kepada beralih daripada jadual Pengguna Dataverse kepada penyambung Office 365 tanpa memerlukan pengubahsuaian pada formula yang tersebar di seluruh aplikasi.
Pendekatan lain ialah mengoptimumkan countRows.
varListItems = CountRows(SampleList)
Dengan fungsi ini Set , anda mesti memulakan pembolehubah varListItems dengan kiraan awal baris dalam senarai sampel dan menetapkannya semula selepas item senarai ditambah atau dialih keluar. Dengan formula bernama, apabila data berubah, varListItems pembolehubah dikemas kini secara automatik.
Formula bernama dalam App.Formulas sifat menyediakan pendekatan yang lebih fleksibel dan deklaratif untuk mengurus nilai dan pengiraan di seluruh aplikasi. Mereka menawarkan kelebihan dari segi kebebasan masa, kemas kini automatik, kebolehpenyelenggaraan dan definisi yang tidak boleh diubah berbanding bergantung semata-mata pada App.OnStart.
| Aspek | Formula bernama (App.Formulas) | App.OnStart |
|---|---|---|
| Kebebasan masa | Formula tersedia serta-merta dan boleh dikira dalam sebarang urutan. | Pembolehubah mungkin memperkenalkan kebergantungan masa yang mempengaruhi ketersediaan. |
| Kemas kini automatik | Formula dikemas kini secara automatik apabila kebergantungan berubah. | Pembolehubah ditetapkan sekali semasa permulaan; kemas kini manual mungkin diperlukan. |
| Kebolehselenggaraan | Formula berpusat di satu lokasi meningkatkan kebolehpenyelenggaraan. | Pembolehubah yang bertaburan mungkin memerlukan pencarian dan pengemaskinian di berbilang tempat. |
| Takrifan yang tidak berubah | Takrifan formula dalam App.Formulas tidak boleh diubah. |
Nilai pembolehubah mungkin terdedah kepada perubahan yang tidak disengajakan. |
Fungsi yang ditakrifkan pengguna
fungsi yang ditakrifkan pengguna dalam Power Apps Studio membolehkan anda mencipta fungsi tersuai anda sendiri.
Takrifkan formula di bawah App.Formulas seperti berikut:
FunctionName(Parameter1:DataType1, Parameter2:DataType2):OutputDataType = Formula
Kod ini berfungsi seperti berikut:
FunctionNamememanggil fungsi.Parameterialah nama input. Anda boleh memasukkan satu atau lebih input.DataTypeialah jenis data yang mesti sepadan dengan argumen yang dihantar ke dalam fungsi. Jenis data yang tersedia termasuk Boolean, Warna, Tarikh, Tarikh, Masa, Dinamik, GUID, Hiperpautan, Teks dan Masa.OutputDataTypeialah jenis data untuk output fungsi.Formulaialah output fungsi.
Gunakan IfError untuk melaksanakan pengendalian ralat dalam fungsi yang ditakrifkan:
// Function to calculate the area of a circle based on the radius
calcAreaOfCircle(radius: Number): Number =
IfError(Pi() * radius * radius, 0);
Panggil fungsi yang ditakrifkan daripada teks atau kawalan label.
calcAreaOfCircle(Int(*TextInput1*.Text))
Optimumkan pembolehubah
Pembolehubah mentakrifkan dan menetapkan nilai setempat dan global yang anda gunakan di seluruh apl anda. Walaupun ia mudah, menggunakan terlalu banyak pembolehubah boleh menjadikan apl anda kurang cekap.
Contoh berikut menunjukkan cara mengesetkan pembolehubah untuk setiap atribut objek, yang memerlukan penggunaan Set untuk setiap sifat.
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);
Pendekatan yang lebih cekap ialah menggunakan hartanah hanya apabila anda memerlukannya:
Set(varEmployee, Office365Users.MyProfile())
"Welcome " & varEmployee.DisplayName
Gunakan pembolehubah konteks dan pembolehubah global dengan bijak. Jika skop pembolehubah melangkau satu skrin, gunakan pembolehubah global dan bukannya pembolehubah konteks.
Terlalu banyak pembolehubah yang tidak digunakan meningkatkan penggunaan memori dan boleh memperlahankan permulaan apl. Sumber diperuntukkan untuk pembolehubah ini walaupun anda tidak menggunakannya. Pembolehubah yang tidak digunakan juga menambah kerumitan pada logik apl anda. Pastikan Apl Kuasa anda bersih dan teratur untuk prestasi yang lebih baik dan pembangunan yang lebih mudah.
Optimumkan koleksi
Koleksi ialah struktur storage data sementara yang anda gunakan untuk menyimpan dan memanipulasi data dalam app Power Apps. Walau bagaimanapun, kutipan boleh menyebabkan overhed prestasi. Hadkan penggunaan koleksi anda dan gunakannya hanya apabila perlu.
// Use this pattern
ClearCollect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
// Do not use this pattern
Clear(colErrors);
Collect(colErrors, {Text: gblErrorText, Code: gblErrorCode});
Untuk mengira rekod dalam koleksi tempatan, gunakan CountIf dan bukannya Count(Filter())
Pertimbangkan pendekatan ini apabila bekerja dengan koleksi:
Hadkan saiz dan bilangan koleksi. Oleh kerana koleksi adalah setempat kepada apl, ia disimpan dalam memori peranti mudah alih. Lebih banyak koleksi data yang dipegang, atau lebih banyak koleksi yang anda gunakan, semakin teruk prestasinya. Gunakan fungsi untuk
ShowColumnsmendapatkan lajur tertentu sahaja. TambahFilterfungsi untuk mendapatkan hanya data yang berkaitan.Contoh fungsi berikut mengembalikan keseluruhan set data:
ClearCollect(colDemoAccount, Accounts);Bandingkan fungsi ini dengan kod berikut, yang hanya mengembalikan rekod dan lajur tertentu:
ClearCollect(colAcc, ShowColumns( Filter(Accounts, !IsBlank('Address 1: City')), "name","address1_city"))Contoh ini mengembalikan set data berikut:
Tetapkan kekerapan muat semula sumber data. Jika anda menambah rekod baharu pada koleksi, muat semula atau kumpulkan padanya untuk mendapatkan rekod baharu atau diubah. Jika berbilang pengguna mengemas kini sumber data anda, muat semula koleksi untuk mendapatkan rekod baharu atau diubah. Lebih banyak panggilan muat semula bermakna lebih banyak interaksi dengan pelayan.
Cache data dalam koleksi dan pembolehubah
Koleksi ialah pembolehubah jadual yang menyimpan baris dan lajur data, bukan hanya satu item data. Koleksi berguna kerana dua sebab utama: mengagregat data sebelum menghantarnya ke sumber data dan menyimpan maklumat dalam cache untuk mengelakkan pertanyaan yang kerap. Oleh kerana koleksi sepadan dengan struktur jadual sumber data dan Power Apps, ia membolehkan anda berinteraksi dengan data dengan cekap, walaupun anda berada di luar talian.
// Clear the contents of EmployeeCollection, it already contains data
ClearCollect(
colEmployee,
{
Id: "1",
Name: "John",
Department: "IT"
},
{
Id: "2",
Name: "Nestor",
Department: "IT"
}
)
Alih keluar pembolehubah dan media yang tidak digunakan
Walaupun media dan pembolehubah yang tidak digunakan mungkin tidak memberi kesan ketara kepada prestasi apl, adalah penting untuk membersihkan apl anda dengan mengalih keluar sebarang media atau pembolehubah yang tidak digunakan.
Fail media yang tidak digunakan meningkatkan saiz apl, yang boleh memperlahankan masa muat apl.
Pembolehubah yang tidak digunakan meningkatkan penggunaan memori dan boleh memperlahankan sedikit permulaan apl. Sumber diperuntukkan untuk pembolehubah ini walaupun ia tidak digunakan. Terlalu banyak pembolehubah yang tidak digunakan juga boleh menjadikan logik apl lebih kompleks.
Gunakan App Checker untuk menyemak media dan pembolehubah yang tidak digunakan.
Optimumkan skrin dan kawalan
Untuk mengoptimumkan skrin dan kawalan dalam Power Apps, pertimbangkan amalan terbaik berikut.
Elakkan kawalan rujukan silang
Kawalan yang merujuk kawalan pada skrin lain boleh memperlahankan pemuatan dan navigasi apl. Pendekatan ini boleh memaksa apl untuk memuatkan skrin lain dan bukannya menunggu sehingga pengguna pergi ke skrin itu. Untuk menyelesaikan masalah ini, gunakan pembolehubah, koleksi dan konteks navigasi untuk berkongsi keadaan merentas skrin.
Penyemak aplikasi dalam Power Apps Studio menunjukkan kawalan yang dirujuk silang. Semak penyemak apl dengan kerap untuk menyelesaikan isu ini.
Dalam imej berikut, kawalan Galeri 1 dirujuk silang dalam kawalan Skrin 2, Label 2.
Jika anda merujuk kawalan daripada skrin pertama dalam apl dalam skrin kedua, tiada kesan prestasi kerana skrin pertama telah dimuatkan. Tingkah laku ini sebenarnya bermanfaat kerana apl adalah deklaratif dan bukannya menggunakan pembolehubah.
Jika anda merujuk kawalan yang belum dimuatkan, seperti skrin pertama yang merujuk kawalan yang dinamakan Label 3 daripada skrin 3, app memuatkan skrin tersebut ke dalam memori.
Dayakan DelayOutput untuk kawalan teks
Tetapan DelayOutput, apabila ditetapkan kepada benar, mendaftarkan input pengguna selepas kelewatan setengah saat. Kelewatan ini berguna untuk menangguhkan operasi yang mahal sehingga pengguna selesai memasukkan teks, seperti penapisan apabila input digunakan dalam formula lain.
Contohnya, pertimbangkan galeri yang Itemnya ditapis bergantung pada perkara yang pengguna masukkan dalam kawalan TextInput:
Jika anda mengesetkan DelayOutput kepada palsu, yang merupakan lalai, galeri menapis sebaik sahaja sebarang teks ditaip. Jika anda mempunyai galeri dengan banyak item, memuatkan semula galeri dengan perubahan serta-merta memperlahankan prestasi. Lebih baik menunggu. Tingkah laku ini praktikal apabila anda menggunakan
TextInputrentetan carian atauStartsWithfungsi.Jika anda mengesetkan DelayOutput kepada true, terdapat kelewatan singkat sebelum perubahan dikesan. Kelewatan ini memberikan masa untuk menyelesaikan menaip. Kelewatan itu berfungsi dengan baik dengan
TextInput.OnChangeharta itu. Jika anda mempunyai tindakan yang terikat dengan perubahan, anda tidak mahu tindakan tersebut dicetuskan sehingga anda selesai menaip dalam medan.
Pemprosesan perwakilan dan bahagian pelayan
Menggunakan pemprosesan perwakilan dan bahagian pelayan membolehkan apl anda mengendalikan set data yang besar dengan cekap dengan memunggah operasi ke sumber data.
Perwakilan
Perwakilan dalam Power Apps merujuk kepada keupayaan aplikasi untuk memunggah operasi tertentu ke sumber data asas dan bukannya memproses operasi dalam Power Apps itu sendiri. Dengan menggunakan perwakilan dalam Power Apps, anda boleh mencipta aplikasi yang lebih cekap dan berskala yang berfungsi dengan baik walaupun dalam senario yang melibatkan set data yang besar. Ketahui had perwakilan untuk sumber data dan operasi tertentu dan reka bentuk apl anda dengan sewajarnya untuk mencapai prestasi optimum.
Nota
Tidak semua fungsi boleh diwakilkan. Ketahui lebih lanjut tentang perwakilan dalam Had pertanyaan: Had perwakilan dan pertanyaan.
Perwakilan mempunyai beberapa kelebihan, seperti pengoptimuman pertanyaan dan sokongan untuk set data yang besar. Selain itu, jika data sumber kerap berubah, perwakilan membantu memastikan data dikemas kini.
Kurangkan panggilan API kepada sumber data
Kadangkala, nampaknya mudah untuk mencipta koleksi dengan melakukan cantuman dalam apl kanvas anda. Pertimbangkan contoh yang berikut. Dalam contoh, terdapat dua jadual: Pemandu dan Lori. Kod itu mencipta koleksi pemandu dan butiran trak, dan untuk setiap trak, ia memanggil pemandu yang memiliki trak itu.
// 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)));
Melakukan penyertaan sedemikian dalam apl kanvas boleh menjana banyak panggilan ke sumber data, yang membawa kepada masa memuatkan yang perlahan.
Pendekatan yang lebih baik ialah:
// 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'
)
)
Dalam senario masa nyata, anda boleh mengurangkan masa memuatkan daripada lima minit kepada kurang daripada 10 saat dengan membetulkan data pada sumbernya.
Pemprosesan bahagian pelayan
Sumber data yang berbeza, seperti SQL dan Dataverse, membolehkan anda mewakilkan pemprosesan data, seperti penapis dan carian, kepada sumber data. Dalam SQL Server, anda boleh mencipta pandangan yang ditakrifkan oleh pertanyaan. Dalam Dataverse, anda boleh membuat pemalam kod rendah untuk memproses data pada pelayan dan mengembalikan hanya hasil akhir ke apl kanvas anda.
Mengagihkan pemprosesan data kepada pelayan boleh meningkatkan prestasi, mengurangkan kod bahagian pelanggan dan menjadikan apl anda lebih mudah diselenggara.
Ketahui lebih lanjut mengenai pemalam di. Dataverse
Optimumkan corak data pertanyaan
Mengoptimumkan cara apl anda menanyakan data boleh mengurangkan masa muat dengan ketara dan meningkatkan responsif keseluruhan.
Gunakan pemilihan lajur eksplisit
Ciri Pemilihan Lajur Eksplisit (ECS) dihidupkan secara lalai untuk semua apl baharu. Jika ia tidak dihidupkan untuk apl anda, hidupkan apl tersebut. ECS secara automatik mengurangkan bilangan lajur yang diambil kepada lajur yang digunakan dalam apl sahaja. Jika ECS tidak dihidupkan, anda mungkin mendapat lebih banyak data daripada yang anda perlukan, yang boleh menjejaskan prestasi. Kadangkala, apabila apl mendapat data melalui pengumpulan, sumber asal lajur boleh hilang. ECS menggugurkan lajur jika ia tidak dapat menentukan bahawa ia digunakan. Untuk memaksa ECS menyimpan lajur yang hilang, gunakan ungkapan ShowColumns Power Fx selepas rujukan koleksi atau dalam kawalan.
Elakkan memanggil Power Automate untuk mengisi koleksi
Amalan biasa ialah menggunakan Power Automate untuk mengambil dan mengisi koleksi dalam Power Apps. Walaupun pendekatan ini sah, terdapat situasi di mana ia mungkin bukan pilihan yang paling cekap. Memanggil Power Automate menambah kependaman rangkaian dan kos prestasi 0.6 saat untuk membuat aliran Power Automate.
Penggunaan aliran Power Automate yang berlebihan juga boleh membawa kepada had pelaksanaan dan pendikit. Sentiasa menilai pertukaran antara kependaman rangkaian dan kos prestasi.
Hapuskan masalah N+1
Masalah N+1 ialah isu biasa dalam pertanyaan pangkalan data di mana, bukannya mengambil semua data yang diperlukan dalam satu pertanyaan, berbilang pertanyaan tambahan dibuat untuk mendapatkan semula data yang berkaitan. Masalah ini boleh membawa kepada isu prestasi, kerana setiap pertanyaan tambahan menanggung overhed.
Panggilan mudah seperti ini untuk memuatkan koleksi boleh menjana panggilan N+1 ke sumber data:
ClearCollect(MyCollection, OrdersList,
{
LookUp(CustomersList,CustomerID = OrdersList[@CustomerID])
}
)
Dalam konteks apl dan galeri kanvas, masalah N+1 mungkin timbul apabila bekerja dengan sumber data dan galeri yang memaparkan rekod berkaitan. Isu ini biasanya berlaku apabila lebih banyak pertanyaan dibuat untuk setiap item yang dipaparkan dalam galeri, yang membawa kepada kesesakan prestasi.
Gunakan objek Lihat dalam SQL Server untuk mengelakkan masalah pertanyaan N+1 atau ubah antara muka pengguna untuk mengelak daripada mencetuskan senario N+1.
Dataverse Secara automatik mengambil data yang diperlukan bagi jadual berkaitan dan anda boleh memilih lajur daripada jadual berkaitan.
ThisItem.Account.'Account Name'
Jika RelatedDataSource saiz kecil (kurang daripada 500 rekod), cache dalam koleksi dan gunakan koleksi untuk memacu senario pertanyaan Carian (N+1).
Hadkan saiz pakej
Walaupun Power Apps mengoptimumkan pemuatan aplikasi, anda boleh mengambil langkah untuk mengurangkan jejak aplikasi anda. Jejak yang dikurangkan amat penting untuk pengguna peranti lama atau pengguna di kawasan yang terdapat kependaman yang lebih tinggi atau lebar jalur yang dikurangkan.
Menilai media yang dibenamkan dalam apl anda. Jika sesuatu tidak digunakan, padamkannya.
Sebagai contoh, imej terbenam mungkin terlalu besar. Daripada fail PNG, lihat sama ada anda boleh menggunakan imej SVG. Berhati-hati tentang menggunakan teks dalam imej SVG kerana fon mesti dipasang pada klien. Penyelesaian apabila anda perlu menunjukkan teks ialah menindih label teks di atas imej.
Menilai sama ada resolusi sesuai untuk faktor bentuk. Resolusi untuk apl mudah alih tidak perlu setinggi resolusi untuk apl desktop. Eksperimen untuk mendapatkan keseimbangan kualiti dan saiz imej yang betul.
Jika anda mempunyai skrin yang tidak digunakan, padamkannya. Berhati-hati untuk tidak memadamkan sebarang skrin tersembunyi yang hanya digunakan oleh pembuat apl atau pentadbir.
Menilai sama ada anda cuba memuatkan terlalu banyak aliran kerja ke dalam satu apl. Sebagai contoh, adakah anda mempunyai kedua-dua skrin pentadbir dan skrin klien dalam apl yang sama? Jika ya, pertimbangkan untuk memecahkannya kepada apl individu. Pendekatan ini juga memudahkan berbilang orang bekerja pada apl pada masa yang sama, dan ia mengehadkan "jejari letupan" (jumlah ujian) apabila perubahan apl memerlukan pas ujian penuh.
Optimumkan ForAll
Fungsi ForAll dalam Power Apps digunakan untuk mengulangi jadual rekod dan menggunakan formula atau set formula pada setiap rekod. Walaupun fungsi itu sendiri serba boleh, penggunaan fungsi yang ForAll tidak betul boleh menjadikan apl anda kurang berprestasi dengan cepat.
Fungsi ini ForAll ialah fungsi jujukan tunggal dan bukannya fungsi serentak. Oleh itu, ia hanya melihat satu rekod pada satu masa, mendapat hasilnya, dan kemudian meneruskan ke rekod seterusnya sehingga ia melalui semua rekod dalam skopnya.
Elakkan bersarang ForAll. Amalan ini boleh membawa kepada lelaran eksponen dan menjejaskan prestasi dengan ketara.
ClearCollect(FollowUpMeetingAttendees.ForAll(ForAll(Distinct(AttendeesList.EmailAddress.Address).Lookup(Attendees))))
Kemas kini pangkalan data secara berkelompok
Anda boleh menggunakan ForAll dan Patch mengemas kini pangkalan data secara berkumpulan. Walau bagaimanapun, berhati-hati apabila anda menggunakan susunan ForAll dan Patch.
Fungsi berikut adalah pendekatan yang lebih baik, contohnya:
Patch(SampleFoodSalesData, ForAll(colSampleFoodSales,
{
demoName:"fromCanvas2"
})
);
Manakala pendekatan berikut kurang cekap:
ForAll(colSampleFoodSales, Patch(SampleFoodSalesData,
{
demoName:"test"
})
);